jsketcher/web/app/sandbox.js
2014-08-17 00:35:13 -07:00

130 lines
No EOL
3.6 KiB
JavaScript

function aspect() {
return window.innerWidth / window.innerHeight;
}
function init() {
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, aspect(), 0.1, 1000 );
var light = new THREE.PointLight( 0xffffff);
light.position.set( 10, 10, 10 );
scene.add(light);
var renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0x808080, 1);
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
function onWindowResize() {
camera.aspect = aspect();
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
render();
}
window.addEventListener( 'resize', onWindowResize, false );
var geometry = new THREE.BoxGeometry(1,1,1);
var material = new THREE.MeshPhongMaterial( new THREE.MeshPhongMaterial({
vertexColors: THREE.FaceColors,
// light
// specular: '#a9fcff',
// intermediate
color: '#B0C4DE',
// dark
// emissive: '#006063',
shininess: 0
}));
// material = new THREE.MeshNormalMaterial( { shading: THREE.FlatShading, color: '#B0C4DE' } );
// material = new THREE.MeshBasicMaterial( { color: 0x00ff00, wireframe : false, vertexColors: THREE.FaceColors } );
// var shader = THREE.ShaderLib['normal'];
// material = new THREE.ShaderMaterial( {
// uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
// vertexShader: shader.vertexShader,
// fragmentShader: shader.fragmentShader.replace(/gl_FragColor.+\n/, 'gl_FragColor = vec4( 0.5, opacity );')
// });
// material = new THREE.ShaderMaterial({
// fragmentShader: "void main() { \n" +
// "gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); \n" +
// "}"
// });
var cube = new THREE.Mesh( geometry, material );
// cube.dynamic = true;
scene.add( cube );
camera.position.z = 5;
cube.rotation.x += 1;
cube.rotation.y += 1;
// controls = new THREE.OrbitControls( camera , renderer.domElement);
controls = new THREE.TrackballControls( camera , renderer.domElement);
// document.addEventListener( 'mousemove', function(){
// controls.update();
// }, false );
controls.rotateSpeed = 3.8;
controls.zoomSpeed = 1.2;
controls.panSpeed = 0.8;
controls.noZoom = false;
controls.noPan = false;
controls.staticMoving = true;
controls.dynamicDampingFactor = 0.3;
controls.keys = [ 65, 83, 68 ];
controls.addEventListener( 'change', render );
var projector = new THREE.Projector();
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector3(0, 0, 0);
raycaster.ray.direction.set(0, -1, 0);
var pickReq = { };
function pick(event) {
var x = ( event.clientX / window.innerWidth ) * 2 - 1;
var y = - ( event.clientY / window.innerHeight ) * 2 + 1;
var mouse = new THREE.Vector3( x, y, 1 );
// console.log(event.clientX + ":"+event.clientY + " -> " + mouse.x + ":"+mouse.y);
var ray = projector.pickingRay(mouse.clone(), camera);
var intersects = ray.intersectObjects( scene.children );
if (intersects.length > 0) {
// console.log("Face Index: " + intersects[0].faceIndex);
// console.log(intersects[0]);
intersects[0].face.color.setHex( 0x00FF00 );
cube.geometry.colorsNeedUpdate = true;
render();
}
}
renderer.domElement.addEventListener('mousedown', pick, false);
function render() {
// console.log("render");
light.position.set(camera.position.x, camera.position.y, camera.position.z);
renderer.render(scene, camera);
}
function animate() {
// console.log("animate");
requestAnimationFrame( animate );
controls.update();
}
render();
animate();
}