minimal three.js
with orbitControls, XZgrid, info
by jmchen
HTML
<div id="info">hw5 helper</div>
<script src="https://threejs.org/build/three.min.js"></script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var camera, scene, renderer;
var circle, pos, vel;
init();
animate();
function init() {
scene = new THREE.Scene();
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
document.body.appendChild(renderer.domElement);
camera = new THREE.OrthographicCamera(-100, 100, 100, -100, -10, 100);
camera.position.z = 50;
////////////////////////////////////////////////////////
var gridXZ = new THREE.GridHelper(200, 20, 'red', 'white');
gridXZ.rotation.x = Math.PI / 2;
scene.add(gridXZ);
let geometry = new THREE.BufferGeometry();
let points = [];
points.push(
new THREE.Vector3(-80, -80, 0),
new THREE.Vector3(80, -80, 0),
new THREE.Vector3(80, 80, 0),
new THREE.Vector3(-80, 80, 0),
new THREE.Vector3(-80, -80, 0));
geometry.setFromPoints(points);
var border = new THREE.Line(geometry, new THREE.LineBasicMaterial({
color: 'blue'
}));
scene.add(border);
circle = new THREE.Mesh(new THREE.CircleGeometry(10, 20, 20), new THREE.MeshBasicMaterial({
color: 'yellow'
}));
scene.add(circle);
pos = new THREE.Vector3();
vel = new THREE.Vector3(10, 20);
}
function animate() {
var dt = 0.05;
requestAnimationFrame(animate);
renderer.render(scene, camera);
pos.add(vel.clone().multiplyScalar(dt));
if (pos.x > 80 || pos.x < -80)
vel.x *= -1;
if (pos.y > 70 || pos.y < -70)
vel.y *= -1;
if (pos.x > 0)
circle.material.color.set('cyan');
else
circle.material.color.set('yellow');
circle.position.copy(pos);
}