OpenGL / OpenGL ES中的帧缓冲,纹理和glColor行为

时间:2009-07-01 16:50:26

标签: opengl opengl-es textures framebuffer

如果这个问题看起来很混乱,我会提前道歉。我所看到的行为对我来说毫无意义。

我有一个Framebuffer渲染到纹理。我将具有不同不透明度的红色,绿色,蓝色的实心矩形渲染到此纹理。然后我将纹理渲染到屏幕(Framebuffer 0)。附加到纹理的Framebuffer是持久的,并且在每个渲染循环中我向纹理绘制更多矩形 - 最终填充屏幕。

我发现如果在将纹理渲染到屏幕之前没有将glColor()设置为白色100%不透明度,则不会渲染特定颜色的矩形。也就是说,如果在渲染纹理之前设置了glColor(1.f, 0.f, 0.f, 1.f),则只会绘制蓝色矩形。

我不明白为什么当前的颜色会对纹理的渲染产生影响(我假设它就像一个blit)。我尝试了各种texParameter(...)电话无效,但我只是在猜测。

感谢。

1 个答案:

答案 0 :(得分:2)

除此之外,glColor()设置用于顶点的颜色。绘制纹理矩形时,每个纹素样本乘以顶点颜色。实际上,如果所有的顶点都具有相同的颜色,则原始顶点的线性插值只是顶点颜色。

本教程很好地解释了所有这些的含义:

http://www.falloutsoftware.com/tutorials/gl/gl4.htm

这里唯一奇怪的部分就是你的声明glColor(1,0,0,1)只能绘制蓝色矩形。如果glColor的参数是红色,绿色,蓝色和alpha,我希望只有红色矩形。希望有一个拼写错误或参数顺序不同,红色= 0,绿色= 0,蓝色= 1,alpha = 1。

相关问题