对粒子应用 2D 方向 - three.js
Apply 2D orientation to particles - three.js
第一次使用 three.js,我正在做一个非常简单的粒子动画,我在其中映射了 4 种不同的纹理。到目前为止,一切都按预期工作,除了我无法弄清楚如何旋转粒子,以便它们以随机方向(倒置、侧向等)呈现。任何帮助将不胜感激!
你可以在这里看到我目前的进度:http://development.shapes.divshot.io/particles.html
这里是相关代码:
sprite1 = THREE.ImageUtils.loadTexture( "sprite1.png" );
sprite2 = THREE.ImageUtils.loadTexture( "sprite2.png" );
sprite3 = THREE.ImageUtils.loadTexture( "sprite3.png" );
sprite4 = THREE.ImageUtils.loadTexture( "sprite4.png" );
parameters = [ sprite1, sprite2, sprite3, sprite4];
for ( i = 0; i < parameters.length; i ++ ) {
sprite = parameters[i];
materials[i] = new THREE.PointCloudMaterial( { size: 45, map: sprite, depthTest: false, transparent : true} );
particles = new THREE.PointCloud( geometry, materials[i] );
particles.rotation.x = Math.random() * 60;
particles.rotation.y = Math.random() * 60;
particles.rotation.z = Math.random() * 60;
scene.add( particles );
}
使用 three.js r71
AFAIK three.js PointCloud/PointCloudMaterial 粒子系统使用 gl.POINTS
绘制点。这意味着它有几个限制。
不能旋转点。
如果您编写自定义着色器,则可以在片段着色器中旋转 UV 坐标,但如果您的图像填充该点,这将无济于事,因为在正方形内旋转正方形纹理会在旋转时剪切边角。
你不能使点大于你所在 GPU/Driver 的最大点侧。
WebGL 仅要求最大尺寸 = 1.0,这意味着 GPUs/Drivers 仅支持 1 像素大点。
检查webglstats.com 似乎只支持1像素大点的GPUs/Drivers数量变少了。仍然有大约 5% 的机器仅支持 63 像素和更小的点,如果您飞过点场,这应该只是一个问题。
你只能有方点。
如果你想要像火花一样又长又细的东西,你不能有矩形点。
一种解决方案是制作您自己的粒子系统,该系统使用四边形并且可以旋转它们的顶点并在多个方向上缩放它们。 This example 完全在 GPU 上运行。不幸的是,它不是基于 three.js。
第一次使用 three.js,我正在做一个非常简单的粒子动画,我在其中映射了 4 种不同的纹理。到目前为止,一切都按预期工作,除了我无法弄清楚如何旋转粒子,以便它们以随机方向(倒置、侧向等)呈现。任何帮助将不胜感激!
你可以在这里看到我目前的进度:http://development.shapes.divshot.io/particles.html
这里是相关代码:
sprite1 = THREE.ImageUtils.loadTexture( "sprite1.png" );
sprite2 = THREE.ImageUtils.loadTexture( "sprite2.png" );
sprite3 = THREE.ImageUtils.loadTexture( "sprite3.png" );
sprite4 = THREE.ImageUtils.loadTexture( "sprite4.png" );
parameters = [ sprite1, sprite2, sprite3, sprite4];
for ( i = 0; i < parameters.length; i ++ ) {
sprite = parameters[i];
materials[i] = new THREE.PointCloudMaterial( { size: 45, map: sprite, depthTest: false, transparent : true} );
particles = new THREE.PointCloud( geometry, materials[i] );
particles.rotation.x = Math.random() * 60;
particles.rotation.y = Math.random() * 60;
particles.rotation.z = Math.random() * 60;
scene.add( particles );
}
使用 three.js r71
AFAIK three.js PointCloud/PointCloudMaterial 粒子系统使用 gl.POINTS
绘制点。这意味着它有几个限制。
不能旋转点。
如果您编写自定义着色器,则可以在片段着色器中旋转 UV 坐标,但如果您的图像填充该点,这将无济于事,因为在正方形内旋转正方形纹理会在旋转时剪切边角。
你不能使点大于你所在 GPU/Driver 的最大点侧。
WebGL 仅要求最大尺寸 = 1.0,这意味着 GPUs/Drivers 仅支持 1 像素大点。
检查webglstats.com 似乎只支持1像素大点的GPUs/Drivers数量变少了。仍然有大约 5% 的机器仅支持 63 像素和更小的点,如果您飞过点场,这应该只是一个问题。
你只能有方点。
如果你想要像火花一样又长又细的东西,你不能有矩形点。
一种解决方案是制作您自己的粒子系统,该系统使用四边形并且可以旋转它们的顶点并在多个方向上缩放它们。 This example 完全在 GPU 上运行。不幸的是,它不是基于 three.js。