【问题标题】:Three.js shader material doesn't display particlesThree.js着色器材质不显示粒子
【发布时间】:2017-04-14 18:37:19
【问题描述】:

我有一个非常基本的场景,其中包括一个立方体形状的粒子网格。你可以在这里找到它:https://codepen.io/sungaila/pen/qqVXKM

我的问题是,如果我使用 ShaderMaterial,我无法让粒子显示。以下是我的(非常简单的)着色器代码:

<script type = 'x-shader/x-vertex' id = 'vertexShader'>
void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0);
}
</script>

<script type = 'x-shader-x-fragment' id = 'fragmentShader'>
void main() {
    gl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );
}
</script>

以下是相关的JS代码:

geometry = new THREE.BoxBufferGeometry(10,10,10, 5, 5, 5);

material = new THREE.ShaderMaterial({
vertexShader: document.getElementById( 'vertexShader' ).textContent,
fragmentShader: document.getElementById( 'fragmentShader' ).textContent
});

particles = new THREE.Points(geometry, material);

我注意到,如果我注释掉“材质”行,材质将默认为“PointsMaterial”并且粒子将显示。此外,粒子的颜色会以某种方式受到着色器代码的影响,即使我觉得我还没有将它们链接在一起。

如何使用 ShaderMaterial 显示粒子?

【问题讨论】:

    标签: javascript three.js shader


    【解决方案1】:

    您需要在顶点着色器中设置gl_PointSize

    <script type = 'x-shader/x-vertex' id = 'vertexShader'>
    void main() {
        vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); 
        gl_PointSize = 1.0 * ( 300.0 / -mvPosition.z ); 
        gl_Position = projectionMatrix * mvPosition;
    }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多