GL_UNSIGNED_BYTE

时间:2012-08-16 17:02:41

标签: glsl

我在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] 正如尼古拉斯所指出我正在使用glColorPointer(4 ...);

1 个答案:

答案 0 :(得分:2)

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

glColorPointer(4, GL_UNSIGNED_BYTE, ...);

(顺便说一句,将来,如果你真的提供这些信息,而不是强迫我们推断出它,那将是最好的)

所以,第一个问题:您是否实际使用4作为颜色组件的数量?你应该是,但你没有说出这样或那样的方式。

现在已经纠正了这个问题,让我们来看看真正的问题(至少它是问题原始形式的 ):

factor = factor/127.0;(to normalize)

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