0

我在 GL_UNSIGNED_BYTE r,g,b 中有颜色,但我想使用 alpha 通道来放置一个自定义值,该值将在像素着色器中使用,以不同地为几何图形着色。现在有两个可能的值 0 和 127 我的问题是当我在顶点着色器中执行此操作时:

[顶点]

varying float factor;

factor = gl_Color.w

似乎该因子始终为 1.0,因为如果我这样做:

[分段]

varying float factor;

factor = factor;

gl_FragColor = vec4(factor, 0.0, 0.0, 1.0)

输出总是红色的,为什么我会期望两种不同的颜色,一种是因子为零时,另一种是因子为 127 时。

因此,如果我分配两个值 0 和 127,我应该进入顶点着色器 0/0.5 吗?这个对吗?

[编辑] 好的,我现在看到两个不同的值,但我不知道为什么我得到它们,GPU 在 gl_Colow.w 组件中执行的任何操作我不知道?

[Edit2] 正如 Nicholas 指出的那样,我正在使用 glColorPointer(4...);

4

1 回答 1

2

由于您正在使用gl_Color输入,并且您引用了GL_UNSIGNED_BYTE,我推测您正在使用glColorPointer来指定这些颜色值。因此,在您的代码中,您调用的内容是:

glColorPointer(4, GL_UNSIGNED_BYTE, ...);

(顺便说一句,将来最好是您实际提供此信息,而不是强迫我们推断它)

那么,第一个问题:您实际上是否使用4了颜色分量的数量?你应该是,但你不会说一种或另一种。

既然这已经得到纠正,让我们来看看真正的问题(或者至少它问题的原始形式):

factor = factor/127.0;(to normalize)

OpenGL已经为您标准化了。如果将任何整数类型与 一起使用glColorPointer,则输入的值gl_Color将被规范化,类型为 [0, 1] UNSIGNED,非无符号类型为 [-1, 1]。

于 2012-08-16T17:58:31.223 回答