Projection - Tank Three.js
How do I make an projection - tank three.js?
Click, tank changes angle and moves. What is a projection - tank three.js? How do you make a projection - tank three.js? This script and codes were developed by Charlie Walter on 11 January 2023, Wednesday.
Projection - Tank Three.js - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Projection - Tank Three.js</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
</head>
<body> <script src='https://threejs.org/build/three.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
Projection - Tank Three.js - Script Codes JS Codes
/* THREE */
var scene_width = window.innerWidth, scene_height = window.innerHeight-10, rot_x = 0, rot_y = 0, up_key_down = false, down_key_down = false, left_key_down, right_key_down = false, w_key_down = false, s_key_down = false, a_key_down, d_key_down = false;
var go_to_rotation_y = null;
var go_to_distance = null;
var angle_ready = false;
var scene = new THREE.Scene();
// set some camera attributes
var x_cam_angle = -45, y_cam_angle = 0;
var camera = new THREE.PerspectiveCamera(45, scene_width/scene_height, .1, 10000); //.PerspectiveCamera(60, ASPECT, 1, 10000);
camera.updateProjectionMatrix();
var renderer = new THREE.WebGLRenderer();
renderer.setSize(scene_width, scene_height);
document.body.appendChild(renderer.domElement);
var plane = new THREE.Mesh(new THREE.PlaneGeometry(20, 20), new THREE.MeshLambertMaterial({color: 'green'}));
plane.overdraw = true;
plane.rotation.x = -90 * (Math.PI / 180);
plane.position.y = -.25;
plane.receiveShadow = true;
scene.add(plane);
var geometry = new THREE.CubeGeometry(1,.5,1.5);
var material = new THREE.MeshLambertMaterial({color: 'limegreen'});
var cube = new THREE.Mesh(geometry, material);
cube.castShadow = true;
scene.add(cube);
scene.fog=new THREE.Fog( 0x000000, 0.015, 25 );
var geometry = new THREE.CubeGeometry(.2,.2,1.5);
var turret = new THREE.Mesh(geometry, material);
cube.add(turret);
turret.position.z = 0.5;
turret.position.y = .35;
turret.geometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 0, -0.75 ) );
camera.position.z = 5;
camera.position.y = 2;
camera.rotation.x = -.3;
// add subtle blue ambient lighting
var ambientLight = new THREE.AmbientLight(0x222222);
scene.add(ambientLight);
// directional lighting
var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(2, 8, 1).normalize();
scene.add(directionalLight);
/*var object = cube;
for(var prop in object){ console.log(typeof prop + " " + prop + " " + object[prop]);
}*/
var render = function () { requestAnimationFrame(render); renderer.render(scene, camera); if(up_key_down){ } if(down_key_down){ } if(right_key_down){ turret.rotation.y -= 2.5 * (Math.PI / 180); } if(left_key_down){ turret.rotation.y += 2.5 * (Math.PI / 180); } if(w_key_down){ } if(s_key_down){ } if(d_key_down){ } if(a_key_down){ } //if(space_key_down){ //} if(go_to_rotation_y){ cube.rotation.y += (go_to_rotation_y > cube.rotation.y) ? 0.05 : -0.05; if(Math.round(cube.rotation.y * 10) / 10 == Math.round(go_to_rotation_y * 10) / 10){ go_to_rotation_y = null; angle_ready = true; } } if(angle_ready && go_to_distance){ if(go_to_distance > 0){ cube.translateZ(-0.1); go_to_distance-=0.1; } }
};
render();
var onMouseWheel = function(e){ camera.translateZ(e.deltaY/10); camera.position.z += e.deltaY/30; camera.rotation.x += -1*(e.deltaY/100); camera.position.y += e.deltaY/10;
}
/* Controllers */
window.onload=function(){ document.onkeydown=function(e){ if(e.keyCode == 38){ up_key_down = true; } if(e.keyCode == 40){ down_key_down = true; } if(e.keyCode == 37){ left_key_down = true; } if(e.keyCode == 39) { right_key_down = true; } if(e.keyCode == 87){ w_key_down = true; } if(e.keyCode == 83){ s_key_down = true; } if(e.keyCode == 65){ a_key_down = true; } if(e.keyCode == 68) { d_key_down = true; } }; document.onkeyup=function(e){ if(e.keyCode == 38){ up_key_down = false; } if(e.keyCode == 40){ down_key_down = false; } if(e.keyCode == 37){ left_key_down = false; } if(e.keyCode == 39) { right_key_down = false; } if(e.keyCode == 87){ w_key_down = false; } if(e.keyCode == 83){ s_key_down = false; } if(e.keyCode == 65){ a_key_down = false; } if(e.keyCode == 68) { d_key_down = false; } }; if(window.onwheel !== undefined) { window.addEventListener('wheel', onMouseWheel) } else if(window.onmousewheel !== undefined) { window.addEventListener('mousewheel', onMouseWheel) } else { // unsupported browser } var projector = new THREE.Projector(); document.onclick=function(event){ var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 ); projector.unprojectVector( vector, camera ); var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() ); var intersects = raycaster.intersectObject(plane, true); if (intersects.length > 0) { console.log(intersects[0].point); } var vector = new THREE.Vector3().copy( intersects[ 0 ].point ); intersects[ 0 ].object.worldToLocal( vector ); // Trig! var opp = cube.position.z - (vector.y*-1), adj = vector.x - cube.position.x, hyp = Math.sqrt((opp*opp) + (adj*adj)); //alert(Math.asin(opp/hyp)) go_to_rotation_y = Math.asin(opp/hyp) - 1.57079633; if(adj <= 0){ go_to_rotation_y *= -1; } angle_ready = false; go_to_distance = hyp; //cube.position.z = vector.y*-1; //cube.position.x = vector.x; } go_to_distance = 5; go_to_rotation_y = -0.6;
};
Developer | Charlie Walter |
Username | cjonasw |
Uploaded | January 11, 2023 |
Rating | 3 |
Size | 3,182 Kb |
Views | 4,048 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Collision with walls | 3,242 Kb |
3D PONG | 3,601 Kb |
Spotify Discover Panel | 1,920 Kb |
Facebook tabs with AngularJS | 3,539 Kb |
Pointer Lock and First Person Mechanics | 3,178 Kb |
Calender UI | 3,513 Kb |
Animating Scrolling | 3,221 Kb |
Charliejwalter.net | 4,688 Kb |
Three.js half circle health bar | 2,617 Kb |
Gamepad API - DOM Element Demo | 2,414 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Layout | X-gyba | 4,234 Kb |
A cube | KyleDavidE | 18,627 Kb |
A Pen by Paul Sullivan | Pwsm50 | 2,349 Kb |
OnScreenAction | Ozgursagiroglu | 2,647 Kb |
AngularJS Skills | Supro | 3,312 Kb |
Gradient-ui-button-mark-fx | Tabspace | 1,881 Kb |
Simple Login Form Template | Banunn | 3,571 Kb |
A Pen by Michael Parenteau | Michaelparenteau | 2,133 Kb |
Basic template | Tomcat | 1,675 Kb |
LBCA - Mail canvas | Emnbdx | 3,856 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!