【问题标题】:Framebuffers, textures and glColor behavior in OpenGL/OpenGL ESOpenGL/OpenGL ES 中的帧缓冲区、纹理和 glColor 行为
【发布时间】:2009-07-01 16:50:26
【问题描述】:

如果这个问题看起来令人困惑,我提前道歉。我看到的行为对我来说毫无意义。

我有一个帧缓冲区渲染到纹理。我为这个纹理渲染了不同不透明度的红色、绿色、蓝色的实心矩形。然后我将纹理渲染到屏幕(帧缓冲区 0)。贴在纹理上的帧缓冲区是持久的,在每个渲染循环中,我都会在纹理上绘制更多矩形——最终填满屏幕。

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

我不明白为什么当前颜色会影响纹理的渲染(我认为这就像 blit)。我尝试了各种texParameter(...) 调用无济于事,但我只是猜测。

谢谢。

【问题讨论】:

  • 我认为函数 glColor() 在 OpenGL ES 中不可用

标签: opengl opengl-es textures framebuffer


【解决方案1】:

除其他外,glColor() 设置用于顶点的颜色。绘制带纹理的矩形时,每个纹素样本都与顶点颜色相乘。好吧,实际上,如果所有顶点都具有相同的颜色,则图元顶点的线性插值就是顶点颜色。

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

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

这里唯一奇怪的部分是您声明 glColor(1, 0, 0, 1) 仅导致绘制蓝色矩形。如果 glColor 的参数是红色、绿色、蓝色和 alpha,我希望它只是红色矩形。希望有一个错字或参数顺序不同,例如 red = 0、green = 0、blue = 1 和 alpha = 1。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2013-07-23
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多