Advertisement
NikolaDimitroff

THREE.js Points on a tube

Aug 7th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var scene = new THREE.Scene();
  2. var width = window.innerWidth;
  3. var height = window.innerHeight;
  4. var camera = new THREE.PerspectiveCamera( 60, width / height, 1, 2100 );
  5. scene.add(camera);
  6. camera.position.set(0,100,500);
  7. camera.lookAt(scene.position);
  8. var canvas = document.createElement('canvas');
  9. canvas.width = canvas.height = 4;    
  10. var context = canvas.getContext('2d');
  11. context.lineWidth = 1;
  12. context.fillStyle = 'rgba(255,255,0,1)';
  13. context.fillRect( 0, 0, canvas.width, canvas.height );
  14. context.strokeStyle = "rgba(255,0,0,1)";
  15. context.strokeRect( 0, 0, canvas.width, canvas.height );
  16. var texture = new THREE.Texture( canvas, THREE.UVMapping );
  17. texture.needsUpdate = true;
  18. var spriteMaterial = new THREE.SpriteMaterial({ map: texture });
  19. var geometry = new THREE.PlaneGeometry( 1, 1 );
  20. var meshMaterial = new THREE.MeshBasicMaterial({ map: texture });
  21.  
  22. function pointOnPath(p, q) {
  23.     var lambda = Math.random();
  24.     var scaledp = (new THREE.Vector3()).copy(p).multiplyScalar(1 - lambda);
  25.     var scaledq = (new THREE.Vector3()).copy(q).multiplyScalar(lambda);
  26.     var result = (new THREE.Vector3()).addVectors(scaledp, scaledq);
  27.     return result;
  28. }
  29.  
  30. function getVectorOffset(p, q, radius) {
  31.     var v = (new THREE.Vector3()).subVectors(q, p);
  32.     v.normalize();
  33.     var e1 = new THREE.Vector3(v.y, -v.x, 0),
  34.         e2 = new THREE.Vector3(v.z, 0, -v.x);
  35.     e1.normalize();
  36.     e2.normalize();
  37.  
  38.     var lambda = Math.random() - 0.5,
  39.         mu = Math.random() - 0.5;
  40.     var offset = e1.multiplyScalar(lambda).add(e2.multiplyScalar(mu));
  41.     offset.normalize();
  42.     offset.multiplyScalar(radius); // multiply the compute offset by the radius you'd like it to circle around
  43.  
  44.     return offset;
  45.  
  46. }
  47.  
  48. function pointOnHotDog(p, q, radius) {
  49.     return pointOnPath(p, q).add(getVectorOffset(p, q, radius));
  50. }
  51.  
  52. var p = new THREE.Vector3(100, 0, 10);
  53. var q = new THREE.Vector3(250, 50, 0);
  54. var radius = 300;
  55. var particleGroup = new THREE.Object3D();
  56. for( var i = 0; i < 300; i++ ) {
  57.     var particle = new THREE.Sprite( spriteMaterial );
  58.     particle.scale.set( 20, 20, 1 );
  59.    
  60.     spritePoint = pointOnHotDog(p, q, radius);
  61.     var pX = spritePoint.x;
  62.     var pY = spritePoint.y;
  63.     var pZ = spritePoint.z;
  64.        
  65.     particle.position.set( pX, pY, pZ );
  66.     particleGroup.add( particle );
  67. }
  68.  
  69. particleGroup.position.y = 0;
  70. scene.add( particleGroup );
  71. camera.position.copy(p).sub(new THREE.Vector3(1000, 0, 0));
  72. camera.lookAt(q);
  73.  
  74.  
  75. var renderer = new THREE.WebGLRenderer();
  76. renderer.setSize( window.innerWidth, window.innerHeight );
  77. document.body.appendChild( renderer.domElement );
  78. render();
  79.  
  80. function render() {
  81.    requestAnimationFrame( render );
  82.    renderer.render( scene, camera );
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement