将整数传递给着色器以定义数组长度(ThreeJS)

时间:2019-05-02 02:01:40

标签: arrays three.js int glsl

我想将整数值传递给着色器以定义数组的长度。我像这样通过它:

uniforms:{
    num_parcels: { value: ap_props.parcels }
}

ap_props.parcels =24。我在着色器中收到它,并尝试像这样应用它:

uniform int num_parcels;
uniform vec3 air_parcel_position[ num_parcels ];

我在浏览器控制台中看到此错误:

THREE.WebGLShader:gl.getShaderInfoLog()片段错误:0:123:'':需要常量表达式 错误:0:123:”:数组大小必须为常数整数表达式

我尝试将num_parcels转换为常量,但似乎不允许这样做。

反正我可以将整数传递给着色器并使用它来定义数组的长度吗?

1 个答案:

答案 0 :(得分:0)

很抱歉。我想出了怎么做。以下是将整数传递给着色器以定义数组长度的方法:

var velocityShader = new THREE.ShaderMaterial( {
    uniforms:{
        time: { type: 'f', value: 0 },
        bounce: { type: 'f', value: .5 },
        friction: { type: 'f', value: .99 },
        gravity: { type: 'f', value: .1 }
    },
    vertexShader: document.getElementById( 'ortho-vs' ).textContent,
    fragmentShader: "#define NUM_PARCELS " + ap_props.parcels + "\n" + document.getElementById( 'velocity-fs' ).textContent,
    depthTest: false,
    depthWrite: false
} );

以fragmentShader开头的行就是答案。