package com.akjava.gwt.threejsexamples.client.examples.geometries; import com.akjava.gwt.stats.client.Stats; import com.akjava.gwt.three.client.gwt.GWTParamUtils; 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.cameras.PerspectiveCamera; import com.akjava.gwt.three.client.js.core.Clock; 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.DirectionalLight; import com.akjava.gwt.three.client.js.materials.MeshLambertMaterial; import com.akjava.gwt.three.client.js.math.Vector2; 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.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.VerticalPanel; public class GeometriesExample extends AbstractExample{ @Override public String getName() { return "geometries"; } @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; double SCREEN_WIDTH; double SCREEN_HEIGHT; Clock clock; private DirectionalLight light; private Object3D object; @Override public void init() { clock=THREE.Clock(); SCREEN_WIDTH = getWindowInnerWidth(); SCREEN_HEIGHT = getWindowInnerHeight(); FocusPanel container = createContainerPanel(); // renderer renderer = THREE.WebGLRenderer(); renderer.setPixelRatio( GWTThreeUtils.getWindowDevicePixelRatio() ); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); container.getElement().appendChild( renderer.getDomElement() ); // scene scene = THREE.Scene(); // camera camera = THREE.PerspectiveCamera(45, getWindowInnerWidth()/getWindowInnerHeight(), 1, 2000); camera.getPosition().set(0, 400, 0); scene.add( THREE.AmbientLight( 0x404040 ) );//scene.add( new THREE.AmbientLight( 0x404040 ) ); light = THREE.DirectionalLight( 0xffffff );//light = new THREE.DirectionalLight( 0xffffff ); light.getPosition().set( 0, 1, 0 );//light.position.set( 0, 1, 0 ); scene.add( light ); Texture map = ImageUtils.loadTexture( "textures/UV_Grid_Sm.jpg" );//var map = THREE.ImageUtils.loadTexture( 'textures/UV_Grid_Sm.jpg' ); map.setWrapS(THREE.RepeatWrapping);//map.wrapS = map.wrapT = THREE.RepeatWrapping; map.setWrapT(THREE.RepeatWrapping); map.setAnisotropy(16);//map.anisotropy = 16; MeshLambertMaterial material = THREE.MeshLambertMaterial( GWTParamUtils.MeshLambertMaterial().map(map).side(THREE.DoubleSide) );//var material = new THREE.MeshLambertMaterial( { map: map, side: THREE.DoubleSide } ); object = THREE.Mesh( THREE.SphereGeometry( 75, 20, 10 ), material );//object = new THREE.Mesh( new THREE.SphereGeometry( 75, 20, 10 ), material ); object.getPosition().set( -400, 0, 200 );//object.position.set( -400, 0, 200 ); scene.add( object ); object = THREE.Mesh( THREE.IcosahedronGeometry( 75, 1 ), material );//object = new THREE.Mesh( new THREE.IcosahedronGeometry( 75, 1 ), material ); object.getPosition().set( -200, 0, 200 );//object.position.set( -200, 0, 200 ); scene.add( object ); object = THREE.Mesh( THREE.OctahedronGeometry( 75, 2 ), material );//object = new THREE.Mesh( new THREE.OctahedronGeometry( 75, 2 ), material ); object.getPosition().set( 0, 0, 200 );//object.position.set( 0, 0, 200 ); scene.add( object ); object = THREE.Mesh( THREE.TetrahedronGeometry( 75, 0 ), material );//object = new THREE.Mesh( new THREE.TetrahedronGeometry( 75, 0 ), material ); object.getPosition().set( 200, 0, 200 );//object.position.set( 200, 0, 200 ); scene.add( object ); // object = THREE.Mesh( THREE.PlaneGeometry( 100, 100, 4, 4 ), material );//object = new THREE.Mesh( new THREE.PlaneGeometry( 100, 100, 4, 4 ), material ); object.getPosition().set( -400, 0, 0 );//object.position.set( -400, 0, 0 ); scene.add( object ); object = THREE.Mesh( THREE.BoxGeometry( 100, 100, 100, 4, 4, 4 ), material );//object = new THREE.Mesh( new THREE.BoxGeometry( 100, 100, 100, 4, 4, 4 ), material ); object.getPosition().set( -200, 0, 0 );//object.position.set( -200, 0, 0 ); scene.add( object ); object = THREE.Mesh( THREE.CircleGeometry( 50, 20, 0, Math.PI * 2 ), material );//object = new THREE.Mesh( new THREE.CircleGeometry( 50, 20, 0, Math.PI * 2 ), material ); object.getPosition().set( 0, 0, 0 );//object.position.set( 0, 0, 0 ); scene.add( object ); object = THREE.Mesh( THREE.RingGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material );//object = new THREE.Mesh( new THREE.RingGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material ); object.getPosition().set( 200, 0, 0 );//object.position.set( 200, 0, 0 ); scene.add( object ); object = THREE.Mesh( THREE.CylinderGeometry( 25, 75, 100, 40, 5 ), material );//object = new THREE.Mesh( new THREE.CylinderGeometry( 25, 75, 100, 40, 5 ), material ); object.getPosition().set( 400, 0, 0 );//object.position.set( 400, 0, 0 ); scene.add( object ); JsArray<Vector2> points = JavaScriptObject.createArray().cast(); for ( int i = 0; i < 50; i ++ ) { points.push( THREE.Vector2( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, ( i - 5 ) * 2 ) );//points.push( new THREE.Vector3( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, 0, ( i - 5 ) * 2 ) ); } object = THREE.Mesh( THREE.LatheGeometry( points, 20 ), material );//object = new THREE.Mesh( new THREE.LatheGeometry( points, 20 ), material ); object.getPosition().set( -400, 0, -200 );//object.position.set( -400, 0, -200 ); scene.add( object ); object = THREE.Mesh( THREE.TorusGeometry( 50, 20, 20, 20 ), material );//object = new THREE.Mesh( new THREE.TorusGeometry( 50, 20, 20, 20 ), material ); object.getPosition().set( -200, 0, -200 );//object.position.set( -200, 0, -200 ); scene.add( object ); object = THREE.Mesh( THREE.TorusKnotGeometry( 50, 10, 50, 20 ), material );//object = new THREE.Mesh( new THREE.TorusKnotGeometry( 50, 10, 50, 20 ), material ); object.getPosition().set( 0, 0, -200 );//object.position.set( 0, 0, -200 ); scene.add( object ); object = THREE.AxisHelper( 50 );//object = new THREE.AxisHelper( 50 ); object.getPosition().set( 200, 0, -200 );//object.position.set( 200, 0, -200 ); scene.add( object ); object = THREE.ArrowHelper( THREE.Vector3( 0, 1, 0 ), THREE.Vector3( 0, 0, 0 ), 50 );//object = new THREE.ArrowHelper( new THREE.Vector3( 0, 1, 0 ), new THREE.Vector3( 0, 0, 0 ), 50 ); object.getPosition().set( 400, 0, -200 );//object.position.set( 400, 0, -200 ); scene.add( object ); //stats 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> - webgl - geometries</div>" ,100,10)); //handle resize & gui initResizeHandlerAndGUI(); //setDebugAnimateOneTimeOnly(true); } private void initResizeHandlerAndGUI() { VerticalPanel gui=addResizeHandlerAndCreateGUIPanel(); gui.setWidth("200px");//some widget broke,like checkbox without parent size gui.setSpacing(2); } public void onWindowResize() { SCREEN_WIDTH = getWindowInnerWidth(); SCREEN_HEIGHT = getWindowInnerHeight(); //re read because of double camera.setAspect(SCREEN_WIDTH / SCREEN_HEIGHT); camera.updateProjectionMatrix(); renderer.setSize( SCREEN_WIDTH , SCREEN_HEIGHT ); } public void render(double now) { double timer = now * 0.0001; camera.getPosition().setX(Math.cos( timer ) * 800);//camera.position.x = Math.cos( timer ) * 800; camera.getPosition().setZ(Math.sin( timer ) * 800);//camera.position.z = Math.sin( timer ) * 800; camera.lookAt( scene.getPosition());//camera.lookAt( scene.position ); for ( int i = 0, l = scene.getChildren().length(); i < l; i ++ ) {//for ( var i = 0, l = scene.children.length; i < l; i ++ ) { Object3D object = scene.getChildren().get(i); object.getRotation().setX(timer * 5);//object.rotation.x = timer * 5; object.getRotation().setY(timer * 2.5);//object.rotation.y = timer * 2.5; } renderer.render(scene, camera); } @Override public String getTokenKey() { return "geometries"; } }