Viewport.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var Viewport = function ( signals ) {
  2. var container = new UI.Panel( 'absolute' );
  3. container.setBackgroundColor( '#aaa' );
  4. //
  5. var sceneHelpers = new THREE.Scene();
  6. var size = 500, step = 25;
  7. var geometry = new THREE.Geometry();
  8. var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );
  9. var color1 = new THREE.Color( 0x444444 ), color2 = new THREE.Color( 0x888888 );
  10. for ( var i = - size; i <= size; i += step ) {
  11. geometry.vertices.push( new THREE.Vector3( -size, 0, i ) );
  12. geometry.vertices.push( new THREE.Vector3( size, 0, i ) );
  13. geometry.vertices.push( new THREE.Vector3( i, 0, -size ) );
  14. geometry.vertices.push( new THREE.Vector3( i, 0, size ) );
  15. var color = i === 0 ? color1 : color2;
  16. geometry.colors.push( color, color, color, color );
  17. }
  18. var grid = new THREE.Line( geometry, material, THREE.LinePieces );
  19. sceneHelpers.add( grid );
  20. //
  21. var scene = new THREE.Scene();
  22. var camera = new THREE.PerspectiveCamera( 50, 1, 1, 5000 );
  23. camera.position.set( 500, 250, 500 );
  24. camera.lookAt( scene.position );
  25. scene.add( camera );
  26. var controls = new THREE.TrackballControls( camera, container.dom );
  27. controls.rotateSpeed = 1.0;
  28. controls.zoomSpeed = 1.2;
  29. controls.panSpeed = 0.8;
  30. controls.noZoom = false;
  31. controls.noPan = false;
  32. controls.staticMoving = true;
  33. controls.dynamicDampingFactor = 0.3;
  34. controls.addEventListener( 'change', render );
  35. var renderer = new THREE.WebGLRenderer( { antialias: true } );
  36. renderer.autoClear = false;
  37. container.dom.appendChild( renderer.domElement );
  38. signals.windowResize.add( update );
  39. animate();
  40. //
  41. function animate() {
  42. requestAnimationFrame( animate );
  43. controls.update();
  44. }
  45. function render() {
  46. renderer.clear();
  47. renderer.render( sceneHelpers, camera );
  48. renderer.render( scene, camera );
  49. }
  50. function update() {
  51. camera.aspect = container.dom.offsetWidth / container.dom.offsetHeight;
  52. camera.updateProjectionMatrix();
  53. renderer.setSize( container.dom.offsetWidth, container.dom.offsetHeight );
  54. render();
  55. }
  56. return container;
  57. }