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);
}