ThreeJs에서 여러 가지 방법으로 입자 애니메이션을 구현할 수 있습니다
이 예에서는 Sprite 클래스를 사용하여 입자를 만듭니다
官方对Sprite类的解释 Sprite A sprite is a plane that always faces towards the camera, generally with a partially transparent texture applied. Sprites do not cast shadows, setting castShadow = true will have no effect.
의미: 이에 의해 생성된 객체 class 항상 카메라를 향하는 평면이며 텍스처를 적용할 수 있습니다. Sprite 객체는 그림자를 추가할 수 없으므로 CastShadow 속성이 유효하지 않습니다.
먼저 장면과 카메라를 만듭니다
container = document.createElement( 'p' ); document.body.appendChild( container ); camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 10000 ); camera.position.set( 0, 0, 120 ); scene = new THREE.Scene();
그런 다음 사용합니다. 입자를 생성하는 스프라이트
var textureList=[pic1,pic2,pic3,pic4,pic5,pic6,pic7,pic8,pic9,pic10]
var textureLoader = new THREE.TextureLoader(); var textureId = parseInt(Math.random()*100)%10 var texture = textureLoader.load(textureList[textureId]); var particle = new THREE.Sprite( new THREE.SpriteMaterial( { map: texture } ) );
난수를 생성하고, 텍스처 리소스를 무작위로 얻고, Sprite 클래스를 사용하여 입자를 생성합니다
particle.position.x = Math.round(Math.random() *winHeight* 1000)%200 +120; particle.position.y =Math.round(Math.random() *winHeight* 10000)%100 +60; particle.position.z = Math.random() * 3 - 30; particle.scale.x = particle.scale.y = Math.round(Math.random() * 50)%5+10 ;
난수를 사용하여 입자의 위치와 크기를 설정합니다
Sprite 클래스는 항상 카메라를 향하는 표면을 생성하기 때문에 꽃잎에 뒤집기 효과를 주기 위해 뒤집기를 사용할 수 없다고 말합니다.
하지만 꽃잎에 뒤집기 효과를 추가해야 합니다
내 구현 아이디어는 2D 요소가 반전되면 실제로 x축 크기를 압축하는 것과 동일하다는 것입니다
그래서 현재 x축의 크기
와 초기 변형 속도
particle.sizeX = particle.scale.x; particle.xScaleSpeed = -0.08;
다음은 모든 파티클을 초기화하는 코드
for ( var i = 0; i < 30; i ++ ) { var textureLoader = new THREE.TextureLoader(); var textureId = parseInt(Math.random()*10); var texture = textureLoader.load(textureList[textureId]); var particle = new THREE.Sprite( new THREE.SpriteMaterial( { map: texture } ) ); particle.position.x = Math.round(Math.random() *winHeight* 1000)%200 +120; particle.position.y =Math.round(Math.random() *winHeight* 10000)%100 +60; particle.position.z = Math.random() * 3 - 30; particle.scale.x = particle.scale.y = Math.round(Math.random() * 50)%5+10 ; particle.sizeX = particle.scale.x; particle.xScaleSpeed = -0.08; particle.speed = Math.round(Math.random()*10)/50; particles.push(particle); scene.add( particle ); }
파티클 생성 후
canvasRender 생성
renderer = new THREE.CanvasRenderer({alpha:true}); renderer.setClearColor("#ffffff",0); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, winHeight ); container.appendChild( renderer.domElement );
꽃잎이 왼쪽 위에서 오른쪽 아래로 떨어지도록 준비하므로 그림을 렌더링할 때마다 꽃잎을 오른쪽 아래로 오프셋해야 하기 때문입니다
particles[i].position.x+=particles[i].speed;
이 속도는 꽃잎을 만들 때 무작위로 생성되므로 꽃잎마다 속도가 달라집니다
particles[i].position.y-=particles[i].speed+0.1;
렌더링될 때마다 y축에 오프셋을 추가합니다.
이 효과는 세로 화면에 표시되므로
y축 속도 비율이 x축이 빠를수록 효과가 좋습니다
그런 다음 렌더링될 때마다 입자 모양에 변형량을 추가합니다.
particles[i].scale.x += particles[i].xScaleSpeed;
현재 변형량이 원본을 초과하는 경우 꽃잎이 뒤집히는 효과를 시뮬레이션해야 합니다. 크기를 변경하면 변형 방향이 반대 방향(커짐에서 작아짐)으로 변경됩니다.
if(particles[i].scale.x <-particles[i].sizeX){ particles[i].xScaleSpeed = 0.08 } if(particles[i].scale.x >=particles[i].sizeX){ particles[i].xScaleSpeed = -0.08 }
이 시점에서 우리는 입자 낙하 + 뒤집기의 역학을 완성했습니다.
또한 입자가 효과 표시 영역을 초과하는 경우 초기 위치로 다시 할당해야 합니다
이런 식으로 떠다니는 꽃잎의 효과는
완전
위 내용은 HTML5 개발 예 - 입자 애니메이션 부동 꽃 효과를 위한 ThreeJs 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!