2

假设您vec3 colourIn从 avertex shader到 a frag shader,有没有办法测试一个值并根据需要覆盖它?

例如,将任何蓝色值大于 0.5 的片段设置为白色?

在我Shader.frag实现了这个测试:

    if(colourIn.b>0.5){ //or if(greaterThan(colourIn.b,0.5))
     colourIn.b=0.0;
    }

它编译并渲染场景,但我不知道它是否有效,因为我是色盲(哈哈)......我的理论是否正确并正确实施?

立方体

4

1 回答 1

0

如果你愿意,你可以直接写条件,你的例子应该是正确的,但更聪明的举动可能是这样的:

float mixValue = clamp(floor(colourIn.b * 2.0), 0.0, 1.0);
colourIn.b = mix(colourIn.b, 0.0, mixValue);

// the floor will be:
//     0.0 for [0.0 — 0.5);
//     1.0 for [0.5, 1.0)
//     2.0 1.0
//
// so the clamp will make mixValue:
//     0.0 for [0.0, 0.5]
//     1.0 for (0.5, 1.0]
//
// if you were to multiply by 1.99 then you could
// get rid of the clamp but if the input is a 
// GLubyte then that'd move 128 into the low group
// instead of the high one

这避免了有条件的,因此避免了任何相关的管道停顿或并行化故障。

于 2013-11-07T19:21:08.137 回答