Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <title>three.js canvas - combo camera - orthographic + perspective</title>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
- <style>
- body {
- font-family: Monospace;
- background-color: #f0f0f0;
- margin: 0px;
- overflow: hidden;
- color: purple;
- }
- a {
- color: red;
- }
- </style>
- </head>
- <body>
- <script src="js/three.min.js"></script>
- <script src="js/CombinedCamera.js"></script>
- <script src="js/Projector.js"></script>
- <script src="js/CanvasRenderer.js"></script>
- <script src="js/stats.min.js"></script>
- <div style="position: absolute; top: 10px; width: 100%; text-align: center; ">
- <a href="http://threejs.org" target="_blank">three.js</a> - Combo Camera<br>
- View: <a href="#" onclick="setOrthographic();return false;"> Orthographic</a> |
- <a href="#" onclick="setPerspective();return false;">Perspective</a><br>
- Lens: <a href="#" onclick="setLens(12);return false;">12mm</a> |
- <a href="#" onclick="setLens(16);return false;">16mm</a> |
- <a href="#" onclick="setLens(24);return false;">24mm</a> |
- <a href="#" onclick="setLens(35);return false;">35mm</a> |
- <a href="#" onclick="setLens(50);return false;">50mm</a> |
- <a href="#" onclick="setLens(60);return false;">60mm</a> |
- <a href="#" onclick="setLens(85);return false;">85mm</a> |
- <a href="#" onclick="setLens(105);return false;">105mm</a><br>
- Fov: <a href="#" onclick="setFov(30);return false;">30°</a> |
- <a href="#" onclick="setFov(50);return false;">50°</a> |
- <a href="#" onclick="setFov(70);return false;">70°</a> |
- <a href="#" onclick="setFov(100);return false;">100°</a><br>
- Zoom: <a href="#" onclick="camera.setZoom(0.5);return false;">0.5x</a> |
- <a href="#" onclick="camera.setZoom(1);return false;">1x</a> |
- <a href="#" onclick="camera.setZoom(2);return false;">2x</a> |
- <br/>
- Views: <a href="#" onclick="camera.toTopView();lookAtScene=false;return false;">Top view</a> |
- <a href="#" onclick="camera.toBottomView();lookAtScene=false;return false;">Bottom view</a> |
- <a href="#" onclick="camera.toLeftView();lookAtScene=false;return false;">Left view</a> |
- <a href="#" onclick="camera.toRightView();lookAtScene=false;return false;">Right view</a> |
- <a href="#" onclick="camera.toFrontView();lookAtScene=false;return false;">Front view</a> |
- <a href="#" onclick="camera.toBackView();lookAtScene=false;return false;">Back view</a> |
- <a href="#" onclick="lookAtScene=true;return false;">Look at Scene</a>
- <br/>
- <div id="fov"></div>
- </div>
- <script>
- var container, stats;
- var camera, scene, renderer;
- var lookAtScene = true;
- var striker;
- var whiteGoti = [];
- var blackGoti = [];
- var listofkhambe = [];
- var queen, arrow, count=0, arrowangle = 90, power=0, start_time;
- init();
- animate();
- function setFov( fov ) {
- camera.setFov( fov );
- document.getElementById('fov').innerHTML = 'FOV '+ fov.toFixed(2) +'°' ;
- }
- function setLens( lens ) {
- // try adding a tween effect while changing focal length, and it'd be even cooler!
- var fov = camera.setLens( lens );
- document.getElementById('fov').innerHTML = 'Converted ' + lens + 'mm lens to FOV '+ fov.toFixed(2) +'°' ;
- }
- function setOrthographic() {
- camera.toOrthographic();
- document.getElementById('fov').innerHTML = 'Orthographic mode' ;
- }
- function setPerspective() {
- camera.toPerspective();
- document.getElementById('fov').innerHTML = 'Perspective mode' ;
- }
- function checkKey(e) {
- e = e || window.event;
- if (e.keyCode == '38') {
- if (count==2)
- {
- power += 1000;
- }
- }
- else if (e.keyCode == '40') {
- if (count==2)
- {
- power -= 1000;
- }
- }
- else if (e.keyCode == '37') {
- if (striker.position.x > -225 && count==0){
- striker.position.x -= 50;
- }
- if ( count == 1 )
- {
- arrowangle += 5;
- updatearrow();
- }
- }
- else if (e.keyCode == '39' ) {
- if (striker.position.x < 275 && count==0){
- striker.position.x += 50;
- }
- if ( count == 1 )
- {
- arrowangle -= 5;
- updatearrow();
- }
- }
- else if (e.keyCode == '13') {
- if (count == 0 ){
- arrow = createArrow();
- scene.add(arrow);
- }
- count += 1;
- if (count == 3)
- {
- scene.remove(arrow);
- }
- }
- }
- function createCylinder(posx, posy, posz, ccolor) {
- var geometry = new THREE.CylinderGeometry( 15, 15, 20, 32 );
- var material = new THREE.MeshBasicMaterial( { color: ccolor, overdraw: 0.5 } );
- var obj = new THREE.Mesh( geometry, material );
- obj.scale.y = Math.floor( 0.3 );
- obj.position.x = posx;
- obj.position.y = posy;
- obj.position.z = posz;
- return obj;
- }
- function createArrow() {
- var sourcePos = new THREE.Vector3(striker.position.x, striker.position.y, striker.position.z);
- var targetPos = new THREE.Vector3(striker.position.x + 100*Math.cos(arrowangle*(Math.PI/180)), 0, striker.position.z - 100*Math.sin(arrowangle*(Math.PI/180)));
- var direction = new THREE.Vector3().sub(targetPos, sourcePos);
- var arrowtemp = new THREE.ArrowHelper(direction.clone().normalize(), sourcePos, 100, 0x000000);
- return arrowtemp;
- }
- function updatearrow(){
- var newSourcePos = new THREE.Vector3(striker.position.x, striker.position.y, striker.position.z);
- var newtargetPos = new THREE.Vector3(striker.position.x + 100*Math.cos(arrowangle*(Math.PI/180)), 0, striker.position.z - 100*Math.sin(arrowangle*(Math.PI/180)));
- var direction = new THREE.Vector3().sub(newtargetPos, newSourcePos);
- arrow.setDirection(direction.normalize());
- }
- function movestriker(){
- if (count == 3 )
- {
- var d = new Date();
- var time_elapsed = d.getTime() - start_time;
- striker.position.x += power*Math.cos(arrowangle*(Math.PI/180))*(time_elapsed/1000);
- striker.position.y += 0;
- striker.position.z -= power*Math.sin(arrowangle*(Math.PI/180))*(time_elapsed/1000);
- power = power/1.02;
- }
- }
- function checkcollisionwithwalls(){
- if (striker.position.x <= -435 || striker.position.x >= 435 )
- {
- arrowangle += 180 - 2*arrowangle;
- }
- if (striker.position.z <= -435 || striker.position.z >= 435)
- {
- arrowangle += -2*arrowangle ;
- }
- }
- function checkcollisionwithcoins(obj)
- {
- for (i = 0 ; i < 4; i++ ){
- var distance = Math.sqrt((whiteGoti[i].position.z-obj.position.z)*(whiteGoti[i].position.z-obj.position.z) + (whiteGoti[i].position.x-obj.position.x)*(whiteGoti[i].position.x-obj.position.x));
- if (Math.round(distance) == 30 || Math.round(distance) == 31 || Math.round(distance) == 29)
- {
- alert("Cool!");
- }
- }
- }
- function init() {
- container = document.createElement( 'div' );
- document.body.appendChild( container );
- camera = new THREE.CombinedCamera( window.innerWidth / 2, window.innerHeight / 2, 70, 1, 1000, - 500, 1000 );
- camera.position.x = 200;
- camera.position.y = 100;
- camera.position.z = 200;
- scene = new THREE.Scene();
- // Grid
- var size = 500, step = 50;
- var geometry = new THREE.Geometry();
- for ( var i = - size; i <= size; i += step ) {
- geometry.vertices.push( new THREE.Vector3( - size, 0, i ) );
- geometry.vertices.push( new THREE.Vector3( size, 0, i ) );
- geometry.vertices.push( new THREE.Vector3( i, 0, - size ) );
- geometry.vertices.push( new THREE.Vector3( i, 0, size ) );
- }
- var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2 } );
- var line = new THREE.LineSegments( geometry, material );
- scene.add( line );
- // Cubes
- var geometry = new THREE.BoxGeometry( 50, 50, 50 );
- var material = new THREE.MeshBasicMaterial( { color: 0xb35900, overdraw: 0.5 } );
- // Drawing the borders
- var cornerx = -500;
- var cornerz = -500;
- for ( var i = 0; i < 80; i ++ ) {
- var cube = new THREE.Mesh( geometry, material );
- cube.scale.y = Math.floor( 1 );
- cube.position.x = cornerx + 25;
- cube.position.y = ( cube.scale.y * 50 ) / 2;
- cube.position.z = cornerz + 25;
- scene.add(cube);
- if (cornerx == -500 && cornerz > -500){
- cornerz -= 50;
- }
- if (cornerz == 500 && cornerx > -500){
- cornerx -= 50;
- }
- if (cornerx == 500 && cornerz < 500){
- cornerz += 50;
- }
- if (cornerz == -500 && cornerx < 500){
- cornerx += 50;
- }
- }
- //Body Start
- var cornerx = -450;
- var cornerz = -450;
- var material = new THREE.MeshBasicMaterial( { color: 0xffb366, overdraw: 0.5 } );
- while ( cornerz <= 450 ) {
- var cube = new THREE.Mesh( geometry, material );
- cube.scale.y = Math.floor( 0.2 );
- cube.position.x = cornerx + 25;
- cube.position.y = ( cube.scale.y * 50 ) / 2;
- cube.position.z = cornerz + 25;
- if(!(( cornerx==-450 && cornerz==-450) || ( cornerx==450 && cornerz==-450) || ( cornerx==-450 && cornerz==450) || ( cornerx==450 && cornerz==450)))
- {
- scene.add(cube);
- }
- if (cornerx == 450){
- cornerz += 50;
- cornerx = -450;
- }
- else {
- cornerx += 50;
- }
- }
- //Body End
- var geometry = new THREE.CylinderGeometry( 25, 25, 20, 32 );
- listofkhambe.push(createCylinder(-275, 0, -275, 0xb32d00));
- listofkhambe.push(createCylinder(325, 0, 325, 0xb32d00));
- listofkhambe.push(createCylinder(-275, 0, 325, 0xb32d00));
- listofkhambe.push(createCylinder(325, 0, -275, 0xb32d00));
- scene.add(listofkhambe[0]);
- scene.add(listofkhambe[1]);
- scene.add(listofkhambe[2]);
- scene.add(listofkhambe[3]);
- queen = createCylinder(25, 0, 25, 0xff0000)
- scene.add(queen);
- blackGoti.push(createCylinder(75, 0, 25, 0x000000));
- blackGoti.push(createCylinder(25, 0, -25, 0x000000));
- blackGoti.push(createCylinder(-25, 0, 25, 0x000000));
- blackGoti.push(createCylinder(25, 0, 75, 0x000000));
- scene.add(blackGoti[0]);
- scene.add(blackGoti[1]);
- scene.add(blackGoti[2]);
- scene.add(blackGoti[3]);
- whiteGoti.push(createCylinder(25 + 50*Math.cos(Math.PI/4), 0, 25 + 50*Math.sin(Math.PI/4), 0xffffff));
- whiteGoti.push(createCylinder(25 + 50*Math.cos(3*Math.PI/4), 0, 25 + 50*Math.sin(3*Math.PI/4), 0xffffff));
- whiteGoti.push(createCylinder(25 + 50*Math.cos(5*Math.PI/4), 0, 25 + 50*Math.sin(5*Math.PI/4), 0xffffff));
- whiteGoti.push(createCylinder(25 + 50*Math.cos(7*Math.PI/4), 0, 25 + 50*Math.sin(7*Math.PI/4), 0xffffff));
- scene.add(whiteGoti[0]);
- scene.add(whiteGoti[1]);
- scene.add(whiteGoti[2]);
- scene.add(whiteGoti[3]);
- striker = createCylinder(75, 0, 325, 0x5900b3);
- scene.add(striker);
- var geometry = new THREE.Geometry();
- geometry.vertices.push( new THREE.Vector3( -300, 0.4, 350 ) );
- geometry.vertices.push( new THREE.Vector3( 350, 0.4, 350 ) );
- geometry.vertices.push( new THREE.Vector3( 350, 0.4, -300 ) );
- geometry.vertices.push( new THREE.Vector3( -300, 0.4, -300 ) );
- geometry.vertices.push( new THREE.Vector3( 350, 0.4, 350 ) );
- geometry.vertices.push( new THREE.Vector3( 350, 0.4, -300 ) );
- geometry.vertices.push( new THREE.Vector3( -300, 0.4, 350 ) );
- geometry.vertices.push( new THREE.Vector3( -300, 0.4, -300 ) );
- var material = new THREE.LineBasicMaterial( { color: 0xb32d00 } );
- var line = new THREE.LineSegments( geometry, material );
- scene.add( line );
- renderer = new THREE.CanvasRenderer();
- renderer.setClearColor( 0xf0f0f0 );
- renderer.setPixelRatio( window.devicePixelRatio );
- renderer.setSize( window.innerWidth, window.innerHeight );
- container.appendChild( renderer.domElement );
- stats = new Stats();
- stats.domElement.style.position = 'absolute';
- stats.domElement.style.top = '0px';
- container.appendChild( stats.domElement );
- window.addEventListener( 'resize', onWindowResize, false );
- function onWindowResize(){
- camera.setSize( window.innerWidth, window.innerHeight );
- camera.updateProjectionMatrix();
- renderer.setSize( window.innerWidth, window.innerHeight );
- }
- }
- //
- function animate() {
- requestAnimationFrame( animate );
- stats.begin();
- render();
- stats.end();
- }
- function render() {
- var timer = Date.now() * 0.0001;
- document.onkeydown = checkKey
- movestriker();
- checkcollisionwithwalls();
- checkcollisionwithcoins(striker);
- camera.position.x = Math.cos( timer ) * 200;
- camera.position.z = Math.sin( timer ) * 200;
- if ( lookAtScene ) camera.lookAt( scene.position );
- renderer.render( scene, camera );
- var d = new Date();
- start_time = d.getTime();
- }
- </script>
- </body>
- </html>
Add Comment
Please, Sign In to add comment