粒子动画
function createParticle ( ) {
var geometry = new THREE. Geometry ( ) ;
var mouse = {
x: 0 ,
y: 100
} ;
var vertices = new THREE. Vector3 (
mouse. x,
mouse. y,
- 100
) ;
var material = new THREE. PointCloudMaterial ( {
color: 0X00ff00 ,
size: 3 ,
transparent: true ,
sizeAttenuation: true
} ) ;
geometry. vertices. push ( vertices) ;
particle = new THREE. PointCloud ( geometry, material) ;
particle. speed = Math. random ( ) / 1000 + 0.001
particle. name = 'particle'
particle. direction = {
x: ( Math. random ( ) - .5 ) * window. innerWidth * 2 ,
y: ( Math. random ( ) - .5 ) * window. innerHeight * 2
} ;
scene. add ( particle) ;
for ( var i = 0 , j = scene. children. length; i < j; i++ ) {
var particle = scene. children[ i] ;
if ( particle. geometry) {
if ( particle. geometry. vertices) {
particle. geometry. vertices[ 0 ] . x += ( 0 - particle. geometry. vertices[ 0 ] . x) * particle. speed;
particle. geometry. vertices[ 0 ] . y += ( 0 - particle. geometry. vertices[ 0 ] . y) * particle. speed;
particle. material. opacity -= .002
particle. geometry. verticesNeedUpdate = true ;
if ( particle. material. opacity < .03 ) {
particle. name == "particle" ? scene. remove ( particle) : null
i-- ;
j-- ;
}
}
}
}
}
function animate ( ) {
render ( )
stats. update ( )
controls. update ( )
requestAnimationFrame ( animate)
Sphere. rotation. y += 0.04
meshTriangle. rotation. y += 0.04 ;
}
管道
let textureLig = new THREE. TextureLoader ( ) . load ( "./assets/2.png" )
textureLig. wrapS = textureLig. wrapT = THREE . RepeatWrapping;
textureLig. repeat. set ( 1 , 1 )
textureLig. needsUpdate = true
let MeshBasicMaterial = new THREE. MeshBasicMaterial ( {
map: textureLig,
side: THREE . BackSide,
transparent: true
} )
let points = [ new THREE. Vector3 ( 0 , 0 , 0 ) ,
new THREE. Vector3 ( 500 , 0 , 0 ) ,
new THREE. Vector3 ( 500 , 0 , 500 ) ,
new THREE. Vector3 ( 0 , 0 , 500 ) ,
new THREE. Vector3 ( 0 , 10 , 0 )
]
let curve = new THREE. CatmullRomCurve3 ( points)
let tubeGeometry = new THREE. TubeGeometry ( curve, 200 , 5 )
let meshLig = new THREE. Mesh ( tubeGeometry, MeshBasicMaterial) ;
scene. add ( meshLig)
function animate ( ) {
if ( textureLig) textureLig. offset. x -= 0.01
}
扫光柱
let textureLig3 = new THREE. TextureLoader ( ) . load ( "./assets/3.png" )
let mesh3 ;
textureLig3. wrapS = textureLig3. wrapT = THREE . RepeatWrapping;
textureLig3. repeat. set ( 1 , 1 )
textureLig3. needsUpdate = true
let geometry3 = new THREE. CylinderGeometry ( 100 , 100 , 200 , 64 ) ;
let materials3 = [
new THREE. MeshBasicMaterial ( {
map: textureLig3,
side: THREE . DoubleSide,
transparent: true
} ) ,
new THREE. MeshBasicMaterial ( {
transparent: true ,
opacity: 0 ,
side: THREE . DoubleSide
} ) ,
new THREE. MeshBasicMaterial ( {
transparent: true ,
opacity: 0 ,
side: THREE . DoubleSide
} )
]
mesh3 = new THREE. Mesh ( geometry3, materials3)
mesh3. position. set ( - 100 , 20 , 20 )
scene. add ( mesh3)
let s = 0 ;
let p = 1 ;
function animate ( ) {
s += 0.01 ;
p -= 0.005 ;
if ( s > 2 ) {
s = 0 ;
p = 1 ;
}
mesh3. scale. set ( 1 + s, 1 , 1 + s) ;
mesh3. material[ 0 ] . opacity = p;
}
点击事件
var raycaster = new THREE. Raycaster ( ) ;
var mouse = new THREE. Vector2 ( ) ;
window. addEventListener ( "click" , onMouseClick) ;
function onMouseClick ( event) {
mouse. x = ( event. clientX / window. innerWidth) * 2 - 1 ;
mouse. y = - ( event. clientY / window. innerHeight) * 2 + 1 ;
raycaster. setFromCamera ( mouse, camera) ;
var intersects = raycaster. intersectObjects ( scene. children) ;
if ( intersects. length > 0 ) {
scene. children. forEach ( item => {
item. name == "sphere" ? scene. remove ( item) : null
} )
}
}