我不知道我在这里做错了什么。我有一个名为
uFloatArray
的统一浮点数组和一个名为 pointID
的浮点属性。然后我循环 uFloatArray
并且如果一个元素不等于 pointID
那么它应该被剪裁。实际上,我只想在屏幕上保留 ID 为 uFloatArray
的那些点。这就是我的顶点着色器的样子
attribute float pointID;
uniform float uFloatArray[5];
void clipPoints(){
for (int i=0; i<5; i++){
if (pointID != uFloatArray[i]){
gl_Position = vec4(100.0, 100.0, 100.0, 0.0);
}
}
return;
}
void main() {
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0 );
vViewPosition = mvPosition.xyz;
clipPoints()
}
出于某些对我来说很奇怪的原因,表达式
pointID != uFloatArray[i]
总是评估为true
。但是,如果我用一些数字替换i
,那么它就可以正常工作。例如pointID != uFloatArray[2]
会裁剪除uFloatArray
的第三个位置存储的ID对应的点以外的所有点。我尝试使用abs
函数以防它与精度有关,但这并没有解决任何问题。