package com.akjava.gwt.threetest.client;
import com.akjava.gwt.three.client.gwt.materials.LineBasicMaterialParameter;
import com.akjava.gwt.three.client.gwt.materials.MeshLambertMaterialParameter;
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.lights.AmbientLight;
import com.akjava.gwt.three.client.js.lights.DirectionalLight;
import com.akjava.gwt.three.client.js.materials.Material;
import com.akjava.gwt.three.client.js.objects.Line;
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.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.FocusPanel;
public class CameraOrthoGraphics extends AbstractDemo{
@Override
public void start(final WebGLRenderer renderer,final int width,final int height,FocusPanel panel) {
super.start(renderer, width, height, panel);
renderer.setClearColor(0xffffff, 1);
final Camera camera = THREE.OrthographicCamera( width / - 2, width / 2,height / 2,height / - 2, - 2000, 1000 );
camera.setPosition(200, 100, 200);
final Scene scene = THREE.Scene();
scene.add( camera );
Geometry geometry = THREE.Geometry();
geometry.vertices().push( THREE.Vector3( - 500, 0, 0 ) );
geometry.vertices().push( THREE.Vector3( 500, 0, 0 ) );
for ( int i = 0; i <= 20; i ++ ) {
Line line = THREE.Line(
geometry,THREE.LineBasicMaterial(LineBasicMaterialParameter.create().color(0x000000).opacity(0.2))
);
line.getPosition().setZ(( i * 50 ) - 500);
scene.add( line );
Line line2 = THREE.Line( geometry,THREE.LineBasicMaterial(LineBasicMaterialParameter.create().color(0x000000).opacity(0.2)));
line2.getPosition().setX(( i * 50 ) - 500);
line2.getRotation().setY(90 * Math.PI / 180);//turn right
scene.add( line2 );
}
geometry = THREE.BoxGeometry( 50, 50, 50 );
Material material = THREE.MeshLambertMaterial(MeshLambertMaterialParameter.create().color(0xffffff).overdraw(true).shading(THREE.Shading.FlatShading()));
for ( int i = 0; i < 100; i ++ ) {
Mesh cube = THREE.Mesh( geometry, material );
cube.getScale().setY(Math.floor( Math.random() * 2 + 1 ));
cube.getPosition().setX(Math.floor( ( Math.random() * 1000 - 500 ) / 50 ) * 50 + 25); //+25 to center
cube.getPosition().setY(( cube.getScale().getY() * 50 ) / 2);
cube.getPosition().setZ((Math.floor( ( Math.random() * 1000 - 500 ) / 50 ) * 50 + 25));
scene.add(cube);
}
//light
AmbientLight ambientLight = THREE.AmbientLight( Math.random() * 0x10 );
scene.add( ambientLight );
DirectionalLight directionalLight = THREE.DirectionalLight( Math.random() * 0xffffff );
directionalLight.getPosition().setX(Math.random() - 0.5);
directionalLight.getPosition().setY(Math.random() - 0.5);
directionalLight.getPosition().setZ(Math.random() - 0.5);
directionalLight.getPosition().normalize();
scene.add( directionalLight );
directionalLight = THREE.DirectionalLight( Math.random() * 0xffffff );
directionalLight.getPosition().setX(Math.random() - 0.5);
directionalLight.getPosition().setY(Math.random() - 0.5);
directionalLight.getPosition().setZ(Math.random() - 0.5);
directionalLight.getPosition().normalize();
scene.add( directionalLight );
Timer timer = new Timer(){
public void run(){
MainWidget.stats.begin();
double timer = System.currentTimeMillis() * 0.0001;
camera.getPosition().setX(Math.cos( timer ) * 200);
camera.getPosition().setZ(Math.sin( timer ) * 200);
camera.lookAt( scene.getPosition() );
renderer.render( scene, camera );
MainWidget.stats.end();
}
};
startTimer(timer);
}
@Override
public String getName() {
return "Camera Orthographics";
}
@Override
public String getHowToHtml() {
return "GWt version of <a href='http://mrdoob.github.com/three.js/examples/canvas_camera_orthographic.html' target='threejs'>canvas_camera_orthographics</a>";
}
}