package com.akjava.gwt.threetest.client; import com.akjava.gwt.html5.client.InputRangeListener; import com.akjava.gwt.html5.client.InputRangeWidget; import com.akjava.gwt.three.client.examples.renderers.CSS3DObject; import com.akjava.gwt.three.client.gwt.GWTParamUtils; import com.akjava.gwt.three.client.js.THREE; import com.akjava.gwt.three.client.js.cameras.Camera; import com.akjava.gwt.three.client.js.core.BufferGeometry; import com.akjava.gwt.three.client.js.core.Geometry; import com.akjava.gwt.three.client.js.core.Object3D; import com.akjava.gwt.three.client.js.extras.ImageUtils; import com.akjava.gwt.three.client.js.lights.AmbientLight; import com.akjava.gwt.three.client.js.lights.DirectionalLight; import com.akjava.gwt.three.client.js.math.Vector3; import com.akjava.gwt.three.client.js.renderers.WebGLRenderer; import com.akjava.gwt.three.client.js.scenes.Scene; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseWheelEvent; import com.google.gwt.user.client.TakesValue; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class TileDemo extends AbstractDemo{ private VerticalPanel controler; private Scene scene; private Camera camera; int cpos=1200; private InputRangeWidget range; private Vector3 cameraBase=THREE.Vector3(); @Override public void start(final WebGLRenderer renderer,final int width,final int height,FocusPanel panel) { super.start(renderer, width, height, panel); camera = THREE.PerspectiveCamera(35,(double)width/height,.1,10000); camera.setPosition(cpos, 600, cpos); scene = THREE.Scene(); scene.add( camera ); String wood="img/wood64.png"; String plain="img/plain64.png"; for ( int j = 0; j < 20; j ++ ) { for ( int i = 0; i < 20; i ++ ) { Object3D object; int num=(int) (Math.random()*2); String url=wood; if(num==1){ url=plain; } if(renderer.gwtGetType().equals("css3d")){ Image img=new Image(url); img.setWidth("50px"); img.setHeight("50px"); object= CSS3DObject.createObject(img.getElement()); }else{ BufferGeometry g=THREE.PlaneBufferGeometry(50, 50); object=THREE.Mesh(g, THREE.MeshBasicMaterial( GWTParamUtils.MeshBasicMaterial().map(ImageUtils.loadTexture(url)) ) ); } object.setPosition(i*50+25-500, 0,j*50+25-500); object.getRotation().setX(Math.toRadians(-90)); scene.add(object); } } AmbientLight ambientLight = THREE.AmbientLight( Math.random() * 0x10 ); scene.add( ambientLight ); DirectionalLight directionalLight = THREE.DirectionalLight(0xffffff ); directionalLight.getPosition().setX(1); directionalLight.getPosition().setY(1); directionalLight.getPosition().setZ(1); directionalLight.getPosition().normalize(); scene.add( directionalLight ); controler = new VerticalPanel(); range = InputRangeWidget.createInputRange(-180, 180, 0); range.setWidth(380); controler.add(range); range.addInputRangeListener(new InputRangeListener() { @Override public void changed(int newValue) { updateCamera(); } }); camera.lookAt( scene.getPosition() ); Timer timer = new Timer(){ public void run(){ MainWidget.stats.begin(); renderer.render( scene, camera ); MainWidget.stats.end(); } }; startTimer(timer); } public void onMouseMove(MouseMoveEvent event) { super.onMouseMove(event); if(mouseDown){ int diff=event.getX()-mouseDownX; ((TakesValue<Integer>)range).setValue(range.getValue()+diff); mouseDownX=event.getX(); mouseDownY=event.getY(); } } public void onMouseWheel(MouseWheelEvent event) { //GWT.log(""+event.getDeltaY()); cpos+=event.getDeltaY()*10; cpos=Math.max(200, cpos); cpos=Math.min(2000, cpos); updateCamera(); //cameraControle.doMouseWheel(event.getDeltaY()); } private void updateCamera(){ double rad=Math.toRadians(range.getValue()); camera.getPosition().setX(Math.cos( rad ) * cpos); camera.getPosition().setZ(Math.sin( rad ) * cpos); camera.getPosition().add(cameraBase); //GWT.log(ThreeLog.get(camera.getPosition())); camera.lookAt( cameraBase ); } @Override public Widget getControler() { return controler; } @Override public String getName() { return "Tile"; } @Override public String getHowToHtml() { return "Wheel to zoom,mouse drog to rotate"; } @Override public boolean isSupportCSS3D(){ return true; } }