我在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 ...);
答案 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]表示非无符号类型。