<html> <!-- three.js_lines.html Neil Gershenfeld 5/12/15 three.js line-drawing test --> <head> <style> body {margin:0px;overflow:hidden;} </style> </head> <body> <div id="container"></div> <script src="js/three.min.js"></script> <script src="js/stats.min.js"></script> <script> var renderer,scene,camera,stats,lines,dx,dy init() animate() function init() { var width = window.innerWidth var height = window.innerHeight var aspect = height/width if (aspect > 1) camera = new THREE.OrthographicCamera(-1,1,-aspect,aspect,0,2) else camera = new THREE.OrthographicCamera(-1/aspect,1/aspect,-1,1,0,2) camera.position.z = 1 scene = new THREE.Scene() root = new THREE.Object3D() var linegeom = new THREE.Geometry() var nlines = 1000 dx = [] dy = [] for (var i = 0; i < nlines; ++i) { linegeom.vertices.push( new THREE.Vector3(2*Math.random()-1,2*Math.random()-1,0), new THREE.Vector3(2*Math.random()-1,2*Math.random()-1,0) ) dx.push(0.02*(Math.random()-.5)) dx.push(0.02*(Math.random()-.5)) dy.push(0.02*(Math.random()-.5)) dy.push(0.02*(Math.random()-.5)) } lines = new THREE.Line(linegeom, new THREE.LineBasicMaterial({color:0x000000,linewidth:2}), THREE.LinePieces) scene.add(lines) renderer = new THREE.WebGLRenderer({antialias:true}) renderer.setClearColor(0xffffff,1) renderer.setSize(width,height) var container = document.getElementById('container') container.appendChild(renderer.domElement) stats = new Stats() stats.domElement.style.position = 'absolute' stats.domElement.style.top = '0px' container.appendChild(stats.domElement) window.addEventListener('resize',resize,false) } function resize() { aspect = window.innerHeight/window.innerWidth if (aspect > 1) { camera.left = -1 camera.right = 1 camera.bottom = -aspect camera.top = aspect } else { camera.left = -1/aspect camera.right = 1/aspect camera.bottom = -1 camera.top = 1 } camera.updateProjectionMatrix() renderer.setSize(window.innerWidth,window.innerHeight) } function animate() { render() stats.update() requestAnimationFrame(animate) } function render() { for (var i = 0; i < (lines.geometry.vertices.length); ++i) { lines.geometry.vertices[i].x += dx[i] if ((lines.geometry.vertices[i].x < -1) || (lines.geometry.vertices[i].x > 1)) dx[i] = -dx[i] lines.geometry.vertices[i].y += dy[i] if ((lines.geometry.vertices[i].y < -1) || (lines.geometry.vertices[i].y > 1)) dy[i] = -dy[i] } lines.geometry.verticesNeedUpdate = true renderer.render(scene,camera) } </script> </body> </html>