package com.akjava.gwt.threecanvastest.client; import com.akjava.gwt.lib.client.LogUtils; import com.akjava.gwt.three.client.java.MeshBasicMaterialBuilder; import com.akjava.gwt.three.client.java.ThreeLog; 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.Geometry; import com.akjava.gwt.three.client.js.extras.ImageUtils; import com.akjava.gwt.three.client.js.materials.Material; import com.akjava.gwt.three.client.js.math.Color; import com.akjava.gwt.three.client.js.math.Vector3; 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.scenes.Scene; import com.akjava.gwt.three.client.js.textures.Texture; import com.akjava.gwt.threecanvastest.client.birds.Bird; import com.akjava.gwt.threecanvastest.client.birds.Boid; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseUpEvent; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.FocusPanel; public class GeometryCube extends AbstractDemo{ Camera camera; Scene scene; WebGLRenderer renderer; Mesh cube; Mesh plane; double targetRotation = 0; double targetRotationOnMouseDown = 0; int mouseX = 0; int mouseXOnMouseDown = 0; int windowHalfX ; int windowHalfY ; @Override public void start(final WebGLRenderer renderer,final int width,final int height,FocusPanel panel) { super.start(renderer, width, height, panel); windowHalfX=width/2; windowHalfY=height/2; this.renderer=renderer; scene = THREE.Scene(); camera = THREE.PerspectiveCamera( 70, width / height, 1, 1000 ); camera.getPosition().setY( 150); camera.getPosition().setZ( 500); scene.add( camera ); Geometry geometry=THREE.BoxGeometry( 200, 200, 200); for(int i=0;i<geometry.faces().length();i++){ geometry.faces().get(i).getColor().setHex((int) (Math.random() * 0xffffff)); } cube = THREE.Mesh(geometry , THREEDep.MeshBasicMaterial().vertexColors(THREE.Colors.FaceColors()).build() ); cube.getPosition().setY( 150); scene.add( cube ); // Plane plane = THREE.Mesh( THREE.PlaneGeometry( 200, 200 ), THREEDep.MeshBasicMaterial(). color( 0xe0e0e0 ).overdraw(true).build() ); plane.getGeometry().applyMatrix(THREE.Matrix4().makeRotationX( - Math.PI / 2 ) ); scene.add( plane ); Timer timer = new Timer(){ public void run(){ MainWidget.stats.begin(); render(); MainWidget.stats.end(); } }; startTimer(timer); } public void onMouseDown(MouseDownEvent event) { super.onMouseDown(event); mouseXOnMouseDown = event.getX() - windowHalfX; targetRotationOnMouseDown = targetRotation; } public void onMouseMove(MouseMoveEvent event) { super.onMouseMove(event); if(mouseDown){ mouseX = event.getX() - windowHalfX; targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02; } } public void render() { double rot= cube.getRotation().getY() +( targetRotation - cube.getRotation().getY() ) * 0.05; plane.getRotation().setY(rot); cube.getRotation().setY(rot); renderer.render( scene, camera ); } @Override public String getName() { return "Geometry Cube"; } @Override public String getHowToHtml() { return "GWt version of <a href='http://mrdoob.github.com/three.js/examples/canvas_geometry_cube.html' target='threejs'>canvas_geometry_cube</a>"; } }