Java tutorial
/* * Copyright 2018 iserge. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.cleanlogic.cesiumjs4gwt.showcase.examples; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTML; import org.cesiumjs.cs.core.Cartesian3; import org.cesiumjs.cs.core.Ellipsoid; import org.cesiumjs.cs.core.JulianDate; import org.cesiumjs.cs.scene.PostProcessStage; import org.cesiumjs.cs.scene.PostProcessStageLibrary; import org.cesiumjs.cs.widgets.ViewerPanel; import org.cleanlogic.cesiumjs4gwt.showcase.basic.AbstractExample; import org.cleanlogic.cesiumjs4gwt.showcase.components.store.ShowcaseExampleStore; import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.Slider; import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.SliderEvent; import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.SliderListener; import javax.inject.Inject; /** * @author Serge Silaev aka iSergio <s.serge.b@gmail.com> */ public class LensFlare extends AbstractExample { private ViewerPanel csVPanel; private CheckBox lensFlareCBox; private Slider intensitySlider; private Slider distortionSlider; private Slider dispersionSlider; private Slider haloWidthSlider; private PostProcessStage lensFlare; @Inject public LensFlare(ShowcaseExampleStore store) { super("LensFlare", "Lens Flare", new String[] { "Lens Flare", "Post processing" }, store); } @Override public void buildPanel() { csVPanel = new ViewerPanel(); lensFlareCBox = new CheckBox(); lensFlareCBox.setValue(false); lensFlareCBox.addValueChangeHandler(new MValueChangeHandler()); intensitySlider = new Slider("intensitySlider", 0, 1000, 200); intensitySlider.setStep(1); intensitySlider.setWidth("150px"); intensitySlider.addListener(new MSliderListener()); distortionSlider = new Slider("distortionSlider", 100, 2000, 1000); distortionSlider.setStep(1); distortionSlider.setWidth("150px"); distortionSlider.addListener(new MSliderListener()); dispersionSlider = new Slider("dispersionSlider", 0, 100, 40); dispersionSlider.setStep(1); dispersionSlider.setWidth("150px"); dispersionSlider.addListener(new MSliderListener()); haloWidthSlider = new Slider("haloWidthSlider", 0, 100, 40); haloWidthSlider.setStep(1); haloWidthSlider.setWidth("150px"); haloWidthSlider.addListener(new MSliderListener()); FlexTable flexTable = new FlexTable(); flexTable.setHTML(1, 0, "<font color=\"white\">Lens Flare</font>"); flexTable.setWidget(1, 1, lensFlareCBox); flexTable.setHTML(2, 0, "<font color=\"white\">Intensity</font>"); flexTable.setWidget(2, 1, intensitySlider); flexTable.setHTML(3, 0, "<font color=\"white\">Distortion</font>"); flexTable.setWidget(3, 1, distortionSlider); flexTable.setHTML(4, 0, "<font color=\"white\">Dispersion</font>"); flexTable.setWidget(4, 1, dispersionSlider); flexTable.setHTML(5, 0, "<font color=\"white\">Halo Width</font>"); flexTable.setWidget(5, 1, haloWidthSlider); AbsolutePanel aPanel = new AbsolutePanel(); aPanel.add(csVPanel); aPanel.add(flexTable, 20, 20); contentPanel.add(new HTML("<p>Post processing effects.</p>")); contentPanel.add(aPanel); initWidget(contentPanel); lensFlare = (PostProcessStage) csVPanel.getViewer().scene().postProcessStages .add(PostProcessStageLibrary.createLensFlareStage()); updatePostProcess(); org.cesiumjs.cs.scene.Camera camera = csVPanel.getViewer().scene().camera(); camera.position = new Cartesian3(40010447.97500168, 56238683.46406788, 20776576.752223067); camera.direction = new Cartesian3(-0.5549701431494752, -0.7801872010801355, -0.2886452346452218); camera.up = new Cartesian3(-0.3016252360948521, -0.13464820558887716, 0.9438707950150912); camera.right = Cartesian3.cross(camera.direction, camera.up, new Cartesian3()); csVPanel.getViewer().clock().currentTime = new JulianDate(2458047, 27399.860215000022); } private void updatePostProcess() { lensFlare.enabled = lensFlareCBox.getValue(); lensFlare.uniforms().setProperty("intensity", intensitySlider.getValue() / 100.); lensFlare.uniforms().setProperty("distortion", distortionSlider.getValue() / 100.); lensFlare.uniforms().setProperty("ghostDispersal", dispersionSlider.getValue() / 100.); lensFlare.uniforms().setProperty("haloWidth", haloWidthSlider.getValue() / 100.); lensFlare.uniforms().setProperty("earthRadius", Ellipsoid.WGS84().maximumRadius()); } @Override public String[] getSourceCodeURLs() { String[] sourceCodeURLs = new String[1]; sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "LensFlare.txt"; return sourceCodeURLs; } private class MValueChangeHandler implements ValueChangeHandler<Boolean> { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { updatePostProcess(); } } private class MSliderListener implements SliderListener { @Override public void onStart(SliderEvent e) { // } @Override public boolean onSlide(SliderEvent e) { updatePostProcess(); return true; } @Override public void onChange(SliderEvent e) { // } @Override public void onStop(SliderEvent e) { // } } }