我想将整数值传递给着色器以定义数组的长度。我像这样通过它:
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转换为常量,但似乎不允许这样做。
反正我可以将整数传递给着色器并使用它来定义数组的长度吗?
答案 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开头的行就是答案。