Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var scene = new THREE.Scene();
- var width = window.innerWidth;
- var height = window.innerHeight;
- var camera = new THREE.PerspectiveCamera( 60, width / height, 1, 2100 );
- scene.add(camera);
- camera.position.set(0,100,500);
- camera.lookAt(scene.position);
- var canvas = document.createElement('canvas');
- canvas.width = canvas.height = 4;
- var context = canvas.getContext('2d');
- context.lineWidth = 1;
- context.fillStyle = 'rgba(255,255,0,1)';
- context.fillRect( 0, 0, canvas.width, canvas.height );
- context.strokeStyle = "rgba(255,0,0,1)";
- context.strokeRect( 0, 0, canvas.width, canvas.height );
- var texture = new THREE.Texture( canvas, THREE.UVMapping );
- texture.needsUpdate = true;
- var spriteMaterial = new THREE.SpriteMaterial({ map: texture });
- var geometry = new THREE.PlaneGeometry( 1, 1 );
- var meshMaterial = new THREE.MeshBasicMaterial({ map: texture });
- function pointOnPath(p, q) {
- var lambda = Math.random();
- var scaledp = (new THREE.Vector3()).copy(p).multiplyScalar(1 - lambda);
- var scaledq = (new THREE.Vector3()).copy(q).multiplyScalar(lambda);
- var result = (new THREE.Vector3()).addVectors(scaledp, scaledq);
- return result;
- }
- function getVectorOffset(p, q, radius) {
- var v = (new THREE.Vector3()).subVectors(q, p);
- v.normalize();
- var e1 = new THREE.Vector3(v.y, -v.x, 0),
- e2 = new THREE.Vector3(v.z, 0, -v.x);
- e1.normalize();
- e2.normalize();
- var lambda = Math.random() - 0.5,
- mu = Math.random() - 0.5;
- var offset = e1.multiplyScalar(lambda).add(e2.multiplyScalar(mu));
- offset.normalize();
- offset.multiplyScalar(radius); // multiply the compute offset by the radius you'd like it to circle around
- return offset;
- }
- function pointOnHotDog(p, q, radius) {
- return pointOnPath(p, q).add(getVectorOffset(p, q, radius));
- }
- var p = new THREE.Vector3(100, 0, 10);
- var q = new THREE.Vector3(250, 50, 0);
- var radius = 300;
- var particleGroup = new THREE.Object3D();
- for( var i = 0; i < 300; i++ ) {
- var particle = new THREE.Sprite( spriteMaterial );
- particle.scale.set( 20, 20, 1 );
- spritePoint = pointOnHotDog(p, q, radius);
- var pX = spritePoint.x;
- var pY = spritePoint.y;
- var pZ = spritePoint.z;
- particle.position.set( pX, pY, pZ );
- particleGroup.add( particle );
- }
- particleGroup.position.y = 0;
- scene.add( particleGroup );
- camera.position.copy(p).sub(new THREE.Vector3(1000, 0, 0));
- camera.lookAt(q);
- var renderer = new THREE.WebGLRenderer();
- renderer.setSize( window.innerWidth, window.innerHeight );
- document.body.appendChild( renderer.domElement );
- render();
- function render() {
- requestAnimationFrame( render );
- renderer.render( scene, camera );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement