package com.akjava.gwt.threejsexamples.client.examples.shading; import com.akjava.gwt.lib.client.GWTUtils; import com.akjava.gwt.lib.client.JavaScriptUtils; import com.akjava.gwt.lib.client.LogUtils; import com.akjava.gwt.stats.client.Stats; import com.akjava.gwt.three.client.examples.js.THREEExp; import com.akjava.gwt.three.client.examples.js.TWEEN; import com.akjava.gwt.three.client.examples.js.controls.TrackballControls; import com.akjava.gwt.three.client.gwt.GWTParamUtils; import com.akjava.gwt.three.client.gwt.JSParameter; import com.akjava.gwt.three.client.gwt.extras.Shader; import com.akjava.gwt.three.client.gwt.renderers.WebGLRendererParameter; import com.akjava.gwt.three.client.java.ui.example.AbstractExample; import com.akjava.gwt.three.client.java.utils.GWTThreeUtils; import com.akjava.gwt.three.client.js.THREE; import com.akjava.gwt.three.client.js.animation.AnimationMixer; import com.akjava.gwt.three.client.js.cameras.CubeCamera; import com.akjava.gwt.three.client.js.cameras.PerspectiveCamera; import com.akjava.gwt.three.client.js.core.Clock; import com.akjava.gwt.three.client.js.core.Geometry; import com.akjava.gwt.three.client.js.extras.ImageUtils; import com.akjava.gwt.three.client.js.extras.geometries.BoxGeometry; import com.akjava.gwt.three.client.js.extras.geometries.PlaneBufferGeometry; import com.akjava.gwt.three.client.js.extras.geometries.SphereGeometry; import com.akjava.gwt.three.client.js.extras.geometries.TorusGeometry; import com.akjava.gwt.three.client.js.lights.AmbientLight; import com.akjava.gwt.three.client.js.lights.PointLight; import com.akjava.gwt.three.client.js.lights.SpotLight; import com.akjava.gwt.three.client.js.loaders.JSONLoader; import com.akjava.gwt.three.client.js.loaders.JSONLoader.JSONLoadHandler; import com.akjava.gwt.three.client.js.materials.Material; import com.akjava.gwt.three.client.js.materials.MeshPhongMaterial; import com.akjava.gwt.three.client.js.materials.ShaderMaterial; import com.akjava.gwt.three.client.js.objects.Mesh; import com.akjava.gwt.three.client.js.renderers.WebGLRenderer; import com.akjava.gwt.three.client.js.renderers.shaders.WebGLShaders.ShaderChunk.ShaderLib; import com.akjava.gwt.three.client.js.scenes.Scene; import com.akjava.gwt.three.client.js.textures.CanvasTexture; import com.akjava.gwt.three.client.js.textures.Texture; import com.akjava.gwt.threejsexamples.client.LabeledInputRangeWidget; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.core.client.JsArray; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; public class PhysicalExample extends AbstractExample{ @Override public String getName() { return "shading/physical"; } @Override public void animate(double timestamp) { render(timestamp); stats.update();//really deprecate?many still use this } private WebGLRenderer renderer; private Scene scene; private PerspectiveCamera camera; private Stats stats; int WIDTH; int HEIGHT; private int windowHalfX,windowHalfY; //private int mouseX,mouseY; Clock clock; private double FAR=10000; private CubeCamera cubeCamera; private Mesh mesh; private AnimationMixer mixer; private boolean DAY; private AmbientLight ambientLight; private PointLight pointLight; private SpotLight sunLight; private TrackballControls controls; private int tweenDirection; private TWEEN tweenDay,tweenNight; private JSParameter parameters; @Override public void init() { clock=THREE.Clock(); WIDTH = (int)getWindowInnerWidth(); HEIGHT = (int)getWindowInnerHeight(); windowHalfX=(int) (getWindowInnerWidth()/2); windowHalfY=(int) (getWindowInnerHeight()/2); FocusPanel container = createContainerPanel(); // renderer renderer = THREE.WebGLRenderer(WebGLRendererParameter.create().antialias(true)); renderer.setPixelRatio( GWTThreeUtils.getWindowDevicePixelRatio() ); renderer.setSize( WIDTH, HEIGHT ); container.getElement().appendChild( renderer.getDomElement() ); renderer.getShadowMap().setEnabled(true);//renderer.shadowMap.enabled = true; renderer.getShadowMap().setType(THREE.PCFSoftShadowMap);//renderer.shadowMap.type = THREE.PCFSoftShadowMap; // renderer.setGammaInput(true);//renderer.gammaInput = true; renderer.setGammaOutput(true);//renderer.gammaOutput = true; // scene scene = THREE.Scene(); scene.setFog(THREE.Fog( 0x00aaff, 1000, FAR )); // camera camera = THREE.PerspectiveCamera(45, getWindowInnerWidth()/getWindowInnerHeight(), 2, FAR); camera.getPosition().set(500, 400, 1200 ); cubeCamera = THREE.CubeCamera( 1, FAR, 128 ); scene.add( cubeCamera ); Canvas x = Canvas.createIfSupported(); Context2d xc = x.getContext2d(); x.setSize(128+"px", 128+"px"); xc.setFillStyle("#fff"); xc.fillRect(0, 0, 128, 128); xc.setFillStyle("#000"); xc.fillRect(0, 0, 64, 64); xc.setFillStyle("#999"); xc.fillRect(32, 32, 32, 32); xc.setFillStyle("#000"); xc.fillRect(64, 64, 64, 64); xc.setFillStyle("#555"); xc.fillRect(96, 96, 32, 32); CanvasTexture texturePattern = THREE.CanvasTexture(x.getCanvasElement());// var // texturePattern // = // new // THREE.CanvasTexture( // x // ) texturePattern.setFormat(THREE.RGBFormat);// texturePattern.format = // THREE.RGBFormat; texturePattern.getRepeat().set(1000, 1000);// texturePattern.repeat.set( // 1000, 1000 ); texturePattern.setWrapS(THREE.RepeatWrapping);// texturePattern.wrapS = // THREE.RepeatWrapping; texturePattern.setWrapT(THREE.RepeatWrapping);// texturePattern.wrapT = // THREE.RepeatWrapping; Texture textureSquares = ImageUtils.loadTexture("textures/patterns/bright_squares256.png");// var // textureSquares // = // THREE.ImageUtils.loadTexture( // "textures/patterns/bright_squares256.png" // ); textureSquares.getRepeat().set(50, 50);// textureSquares.repeat.set( 50, // 50 ); textureSquares.setWrapS(THREE.RepeatWrapping);// textureSquares.wrapS = // textureSquares.wrapT // = // THREE.RepeatWrapping; textureSquares.setWrapT(THREE.RepeatWrapping); textureSquares.setMagFilter(THREE.NearestFilter);// textureSquares.magFilter // = // THREE.NearestFilter; textureSquares.setFormat(THREE.RGBFormat);// textureSquares.format = // THREE.RGBFormat; Texture textureNoiseColor = ImageUtils.loadTexture("textures/disturb.jpg");// var // textureNoiseColor // = // THREE.ImageUtils.loadTexture( // "textures/disturb.jpg" // ); textureNoiseColor.getRepeat().set(1, 1);// textureNoiseColor.repeat.set( // 1, 1 ); textureNoiseColor.setWrapS(THREE.RepeatWrapping);// textureNoiseColor.wrapS // = // textureNoiseColor.wrapT // = // THREE.RepeatWrapping; textureNoiseColor.setWrapT(THREE.RepeatWrapping); textureNoiseColor.setFormat(THREE.RGBFormat);// textureNoiseColor.format // = THREE.RGBFormat; Texture textureLava = ImageUtils.loadTexture("textures/lava/lavatile.jpg");// var // textureLava // = // THREE.ImageUtils.loadTexture( // "textures/lava/lavatile.jpg" // ); textureLava.getRepeat().set(6, 2);// textureLava.repeat.set( 6, 2 ); textureLava.setWrapS(THREE.RepeatWrapping);// textureLava.wrapS = // textureLava.wrapT = // THREE.RepeatWrapping; textureLava.setWrapT(THREE.RepeatWrapping); textureLava.setFormat(THREE.RGBFormat);// textureLava.format = // THREE.RGBFormat; String path = "textures/cube/SwedishRoyalCastle/";// var path = // "textures/cube/SwedishRoyalCastle/"; String format = ".jpg";// var format = '.jpg'; String[] urls = { path + "px" + format, path + "nx" + format, path + "py" + format, path + "ny" + format, path + "pz" + format, path + "nz" + format }; ; Texture reflectionCube = ImageUtils.loadTextureCube(JavaScriptUtils.toArray(urls));// var // reflectionCube // = // THREE.ImageUtils.loadTextureCube( // urls // ); // ground MeshPhongMaterial groundMaterial = THREE.MeshPhongMaterial(GWTParamUtils.MeshPhongMaterial().shininess(80).color(0xffffff).specular(0xffffff) .map(textureSquares));// var groundMaterial = new // THREE.MeshPhongMaterial( {shininess: // 80,color: 0xffffff,specular: // 0xffffff,map: textureSquares} ); PlaneBufferGeometry planeGeometry = THREE.PlaneBufferGeometry(100, 100);// var // planeGeometry // = // new // THREE.PlaneBufferGeometry( // 100, // 100 // ); Mesh ground = THREE.Mesh(planeGeometry, groundMaterial);// var ground = // new // THREE.Mesh( // planeGeometry, // groundMaterial // ); ground.getPosition().set(0, 0, 0);// ground.position.set( 0, 0, 0 ); ground.getRotation().setX(-Math.PI / 2);// ground.rotation.x = - Math.PI // / 2; ground.getScale().set(1000, 1000, 1000);// ground.scale.set( 1000, 1000, // 1000 ); ground.setReceiveShadow(true);// ground.receiveShadow = true; scene.add(ground); // materials Shader shader = ShaderLib.cube(); shader.uniforms().set("tCube", cubeCamera.getRenderTarget());// shader.uniforms[ // "tCube" // ].texture // = // cubeCamera.renderTarget; shader.uniforms().set("tFlip", 1);// shader.uniforms[ "tFlip" ].value = // 1; ShaderMaterial materialCube = THREE.ShaderMaterial(GWTParamUtils.ShaderMaterial().fragmentShader(shader.fragmentShader()) .vertexShader(shader.vertexShader()).uniforms(shader.uniforms()));// var // materialCube // = // new // THREE.ShaderMaterial( // {fragmentShader: // shader.fragmentShader,vertexShader: // shader.vertexShader,uniforms: // shader.uniforms} // ); MeshPhongMaterial materialLambert = THREE.MeshPhongMaterial(GWTParamUtils.MeshPhongMaterial().shininess(50).color(0xffffff).map(textureNoiseColor));// var // materialLambert // = // new // THREE.MeshPhongMaterial( // { // shininess: // 50, // color: // 0xffffff, // map: // textureNoiseColor // } // ); MeshPhongMaterial materialPhong = THREE.MeshPhongMaterial(GWTParamUtils.MeshPhongMaterial().shininess(50).color(0xffffff).specular(0x999999) .map(textureLava));// var materialPhong = new // THREE.MeshPhongMaterial( { shininess: 50, // color: 0xffffff, specular: 0x999999, map: // textureLava } ); MeshPhongMaterial materialPhongCube = THREE.MeshPhongMaterial(GWTParamUtils.MeshPhongMaterial().shininess(50).color(0xffffff).specular(0x999999) .envMap(cubeCamera.getRenderTarget().gwtCastTexture()));// var // materialPhongCube // = new // THREE.MeshPhongMaterial( // { // shininess: // 50, // color: // 0xffffff, // specular: // 0x999999, // envMap: // cubeCamera.renderTarget // } ); // stats // object SphereGeometry sphereGeometry = THREE.SphereGeometry(100, 64, 32);// var // sphereGeometry // = // new // THREE.SphereGeometry( // 100, // 64, // 32 // ); TorusGeometry torusGeometry = THREE.TorusGeometry(240, 60, 32, 64);// var // torusGeometry // = // new // THREE.TorusGeometry( // 240, // 60, // 32, // 64 // ); BoxGeometry cubeGeometry = THREE.BoxGeometry(150, 150, 150);// var // cubeGeometry // = new // THREE.BoxGeometry( // 150, 150, // 150 ); addObject(torusGeometry, materialPhong, 0, 100, 0, 0); addObject(cubeGeometry, materialLambert, 350, 75, 300, 0); mesh = addObject(sphereGeometry, materialPhongCube, 350, 100, -350, 0); BoxGeometry bigCube = THREE.BoxGeometry(50, 500, 50); BoxGeometry midCube = THREE.BoxGeometry(50, 200, 50); BoxGeometry smallCube = THREE.BoxGeometry(100, 100, 100); addObjectColor(bigCube, 0xff0000, -500, 250, 0, 0); addObjectColor(smallCube, 0xff0000, -500, 50, -150, 0); addObjectColor(midCube, 0x00ff00, 500, 100, 0, 0); addObjectColor(smallCube, 0x00ff00, 500, 50, -150, 0); addObjectColor(midCube, 0x0000ff, 0, 100, -500, 0); addObjectColor(smallCube, 0x0000ff, -150, 50, -500, 0); addObjectColor(midCube, 0xff00ff, 0, 100, 500, 0); addObjectColor(smallCube, 0xff00ff, -150, 50, 500, 0); addObjectColor(THREE.BoxGeometry(500, 10, 10), 0xffff00, 0, 600, 0, Math.PI / 4); addObjectColor(THREE.BoxGeometry(250, 10, 10), 0xffff00, 0, 600, 0, 0); addObjectColor(THREE.SphereGeometry(100, 32, 26), 0xffffff, -300, 100, 300, 0); JSONLoader loader=THREE.JSONLoader(); loader.load("models/animated/sittingBox.js", new JSONLoadHandler() { @Override public void loaded(Geometry geometry, JsArray<Material> materials) { MeshPhongMaterial morphMaterial = THREE.MeshPhongMaterial( GWTParamUtils.MeshPhongMaterial().color(0x000000).specular(0xff9900).shininess(50).morphTargets(true).side(THREE.DoubleSide).shading(THREE.FlatShading) );//var morphMaterial = new THREE.MeshPhongMaterial( { color: 0x000000, specular: 0xff9900, shininess: 50, morphTargets: true, side: THREE.DoubleSide, shading: THREE.FlatShading } ); mesh = THREE.Mesh( geometry, morphMaterial );//mesh = new THREE.Mesh( geometry, morphMaterial ); mixer = THREE.AnimationMixer( mesh );//mixer = new THREE.AnimationMixer( mesh ); mixer.clipAction( geometry.getAnimations().get(0) ).setDuration( 10 ).play();//mixer.addAction( new THREE.AnimationAction( geometry.animations[0] ).warpToDuration( 10 ) ); double s = 200;//var s = 200; mesh.getScale().set( s, s, s );//mesh.scale.set( s, s, s ); //morph.setDuration(8000);////morph.duration = 8000; //morph.setMirroredLoop(true);////morph.mirroredLoop = true; mesh.setCastShadow(true);//mesh.castShadow = true; mesh.setReceiveShadow(true);//mesh.receiveShadow = true; scene.add( mesh ); } }); double sunIntensity = 0.3; double pointIntensity = 1; int pointColor = 0xffaa00; if ( DAY ) { sunIntensity = 1; pointIntensity = 0.5; pointColor = 0xffffff; } ambientLight = THREE.AmbientLight( 0x3f2806 );//ambientLight = new THREE.AmbientLight( 0x3f2806 ); scene.add( ambientLight ); pointLight = THREE.PointLight( 0xffaa00, pointIntensity, 5000 );//pointLight = new THREE.PointLight( 0xffaa00, pointIntensity, 5000 ); pointLight.getPosition().set( 0, 0, 0 );//pointLight.position.set( 0, 0, 0 ); scene.add( pointLight ); sunLight = THREE.SpotLight( 0xffffff, sunIntensity, 0, Math.PI/2, 1 );//sunLight = new THREE.SpotLight( 0xffffff, sunIntensity, 0, Math.PI/2, 1 ); sunLight.getPosition().set( 1000, 2000, 1000 );//sunLight.position.set( 1000, 2000, 1000 ); sunLight.setCastShadow(true);//sunLight.castShadow = true; sunLight.setShadowBias(-0.0002);//sunLight.shadowBias = -0.0002; sunLight.setShadowCameraNear(750);//sunLight.shadowCameraNear = 750; sunLight.setShadowCameraFar(4000);//sunLight.shadowCameraFar = 4000; sunLight.setShadowCameraFov(30);//sunLight.shadowCameraFov = 30; sunLight.setShadowCameraVisible(false);//sunLight.shadowCameraVisible = false; scene.add( sunLight ); //trackball consume keydown event.this is the way to add keydown on root //TODO method GWTUtils.addKeyDownHandlerToDocument(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { if(event.getNativeKeyCode() ==78){ if ( tweenDirection == 1 ) { tweenDay.stop(); tweenNight.start(); tweenDirection = -1; } else { tweenNight.stop(); tweenDay.start(); tweenDirection = 1; } } } }); //control controls = THREEExp.TrackballControls( camera, renderer.getDomElement());//controls = new THREE.TrackballControls( camera, renderer.domElement ); controls.getTarget().set( 0, 120, 0 );//controls.target.set( 0, 120, 0 ); controls.setRotateSpeed(1.0);//controls.rotateSpeed = 1.0; controls.setZoomSpeed(1.2);//controls.zoomSpeed = 1.2; controls.setPanSpeed(0.8);//controls.panSpeed = 0.8; controls.setNoZoom(false);//controls.noZoom = false; controls.setNoPan(false);//controls.noPan = false; controls.setStaticMoving(true);//controls.staticMoving = true; controls.setDynamicDampingFactor(0.15);//controls.dynamicDampingFactor = 0.15; controls.setKeys(JavaScriptUtils.toArray(new int[]{65, 83, 68 }));//controls.keys = [ 65, 83, 68 ]; //Tween tweenDirection = -1; parameters = JSParameter.createParameter().set("control", 0); tweenDay = TWEEN.Tween( parameters ).to("control",1 , 1000 ).easing( TWEEN.Easing_Exponential_Out()); tweenNight = TWEEN.Tween( parameters ).to( "control",0, 1000 ).easing( TWEEN.Easing_Exponential_Out() ); stats = Stats.create(); stats.setPosition(0, 0); container.getElement().appendChild(stats.domElement()); //add html info container.add(createAbsoluteHTML("<div style='text:white'><a href='http://threejs.org' target='_blank'>three.js</a> - test</a>" ,100,10)); //handle resize & gui initResizeHandlerAndGUI(); //setDebugAnimateOneTimeOnly(true); } private Mesh addObject(Geometry geometry,Material material,double x,double y,double z,double ry){ Mesh tmpMesh = THREE.Mesh( geometry, material );//var tmpMesh = new THREE.Mesh( geometry, material ); tmpMesh.getMaterial().gwtCastMeshPhongMaterial().getColor().offsetHSL( 0.1, -0.1, 0 );//tmpMesh.material.color.offsetHSL( 0.1, -0.1, 0 ); tmpMesh.getPosition().set( x, y, z );//tmpMesh.position.set( x, y, z ); tmpMesh.getRotation().setY(ry);//tmpMesh.rotation.y = ry; tmpMesh.setCastShadow(true);//tmpMesh.castShadow = true; tmpMesh.setReceiveShadow(true);//tmpMesh.receiveShadow = true; scene.add( tmpMesh ); return tmpMesh; } private Mesh addObjectColor(Geometry geometry,int color,double x,double y,double z,double ry){ MeshPhongMaterial material = THREE.MeshPhongMaterial( GWTParamUtils.MeshPhongMaterial().color(0xffffff) );//var material = new THREE.MeshPhongMaterial( { color: 0xffffff } ); return addObject( geometry, material, x, y, z, ry ); } /* * var gui, shadowConfig = { shadowCameraVisible: false, shadowCameraNear: 750, shadowCameraFar: 4000, shadowCameraFov: 30, shadowBias: -0.0002 }, gamma = { gammaFactor: 2.0, gammaInput: true, gammaOutput: true }; */ private void initResizeHandlerAndGUI() { VerticalPanel gui=addResizeHandlerAndCreateGUIPanel(); gui.setWidth("200px");//some widget broke,like checkbox without parent size gui.setSpacing(2); gui.add(new Label("Shadow")); /* not work on r73 final CheckBox shadowCameraVisible=new CheckBox("shadowCameraVisible"); shadowCameraVisible.setValue(false); shadowCameraVisible.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { // don't work,need helper sunLight.setShadowCameraVisible(shadowCameraVisible.getValue()); } }); gui.add(shadowCameraVisible); */ final LabeledInputRangeWidget shadowCameraNear=new LabeledInputRangeWidget("shadowCameraNear", 1, 1500, 1); shadowCameraNear.setValue(750); shadowCameraNear.addtRangeListener(new ValueChangeHandler<Number>() { @Override public void onValueChange(ValueChangeEvent<Number> event) { sunLight.setShadowCameraNear(shadowCameraNear.getValue());//sunLight.shadowCamera.near = shadowConfig.shadowCameraNear; sunLight.getShadow().getCamera().gwtCastPerspectiveCamera().updateProjectionMatrix(); //sunLight.getShadowCamera().updateProjectionMatrix();//sunLight.shadowCamera.updateProjectionMatrix(); } }); gui.add(shadowCameraNear); final LabeledInputRangeWidget shadowCameraFar=new LabeledInputRangeWidget("shadowCameraFar", 1501, 5000, 1); shadowCameraFar.setValue(4000); shadowCameraFar.addtRangeListener(new ValueChangeHandler<Number>() { @Override public void onValueChange(ValueChangeEvent<Number> event) { sunLight.setShadowCameraFar(shadowCameraFar.getValue()); sunLight.getShadow().getCamera().gwtCastPerspectiveCamera().updateProjectionMatrix(); } }); gui.add(shadowCameraFar); final LabeledInputRangeWidget shadowCameraFov=new LabeledInputRangeWidget("shadowCameraFov", 1, 120, 1); shadowCameraFov.setValue(30); shadowCameraFov.addtRangeListener(new ValueChangeHandler<Number>() { @Override public void onValueChange(ValueChangeEvent<Number> event) { sunLight.setShadowCameraFov(shadowCameraFov.getValue()); sunLight.getShadow().getCamera().gwtCastPerspectiveCamera().updateProjectionMatrix(); } }); gui.add(shadowCameraFov); final LabeledInputRangeWidget shadowBias=new LabeledInputRangeWidget("shadowBias", -0.01, 0.01, 0.0001); shadowBias.setValue(0); shadowBias.addtRangeListener(new ValueChangeHandler<Number>() { @Override public void onValueChange(ValueChangeEvent<Number> event) { sunLight.setShadowBias(shadowBias.getValue()); sunLight.getShadow().getCamera().gwtCastPerspectiveCamera().updateProjectionMatrix(); } }); gui.add(shadowBias); gui.add(new Label("Ganmma")); final LabeledInputRangeWidget gammaFactor=new LabeledInputRangeWidget("gammaFactor", 0.1, 4.0, 0.1); gammaFactor.setValue(2); gammaFactor.addtRangeListener(new ValueChangeHandler<Number>() { @Override public void onValueChange(ValueChangeEvent<Number> event) { renderer.setGammaFactor(gammaFactor.getValue()); } }); gui.add(gammaFactor); } public void onWindowResize() { camera.setAspect(getWindowInnerWidth() / getWindowInnerHeight()); camera.updateProjectionMatrix(); renderer.setSize( (int)getWindowInnerWidth() , (int)getWindowInnerHeight() ); windowHalfX=(int) (getWindowInnerWidth()/2); windowHalfY=(int) (getWindowInnerHeight()/2); // controls.handleResize(); } public void render(double now) { double delta = clock.getDelta(); TWEEN.update(); controls.update(); if ( mixer!=null ) { mixer.update( delta ); } scene.getFog().getColor().setHSL( 0.63, 0.05, parameters.getDouble("control"));//scene.fog.color.setHSL( 0.63, 0.05, parameters.control ); renderer.setClearColor( scene.getFog().getColor());//renderer.setClearColor( scene.fog.color ); sunLight.setIntensity(parameters.getDouble("control") * 0.7 + 0.3);//sunLight.intensity = parameters.control * 0.7 + 0.3; pointLight.setIntensity(- parameters.getDouble("control") * 0.5 + 1);//pointLight.intensity = - parameters.control * 0.5 + 1; pointLight.getColor().setHSL( 0.1, 0.75, parameters.getDouble("control") * 0.5 + 0.5 );//pointLight.color.setHSL( 0.1, 0.75, parameters.control * 0.5 + 0.5 ); // render cube map mesh.setVisible(false);//mesh.visible = false; renderer.setAutoClear(true);//renderer.autoClear = true; cubeCamera.getPosition().copy( mesh.getPosition());//cubeCamera.position.copy( mesh.position ); cubeCamera.updateCubeMap( renderer, scene ); renderer.setAutoClear(false);//renderer.autoClear = false; mesh.setVisible(true);//mesh.visible = true; renderer.render(scene, camera); } @Override public String getTokenKey() { return "shading_physical"; } }