将2D方向应用于粒子 - three.js

Ste*_*eph 5 javascript webgl 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 );

            }
Run Code Online (Sandbox Code Playgroud)

使用three.js r71

gma*_*man 2

AFAIK Three.js PointCloud/PointCloudMaterial 粒子系统用于gl.POINTS绘制点。这意味着它有几个限制。

  1. 您无法旋转这些点。

    如果您编写自定义着色器,则可以在片段着色器中旋转 UV 坐标,但如果您的图像填充了该点,则这将无济于事,因为在正方形内旋转正方形纹理会在旋转时剪切角。

  2. 您不能使点大于您所在的 GPU/驱动程序的最大点侧。

    WebGL 仅要求最大大小 = 1.0,这意味着 GPU/驱动程序仅支持 1 像素大点。

    查看webglstats.com,发现仅支持 1 像素大点的 GPU/驱动程序的数量已经变少。仍然有大约 5% 的机器仅支持 63 像素或更小的点,这只有在您飞过点场时才会成为问题。

  3. 你只能有平方点。

    如果你想要像火花这样又长又细的东西,你就不能用矩形点。

一种解决方案是创建您自己的粒子系统,该系统使用四边形并可以旋转其顶点以及在多个方向上缩放它们。该示例完全在 GPU 上运行。不幸的是它不是基于 Three.js 的。