为什么这个布尔运算在着色器中遍历统一浮点数组时总是为真?

问题描述 投票:0回答:0

我不知道我在这里做错了什么。我有一个名为

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
函数以防它与精度有关,但这并没有解决任何问题。

three.js glsl shader
© www.soinside.com 2019 - 2024. All rights reserved.