首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >顶点着色器和片段着色器中的gl_Color和gl_FrontColor之间的关系是什么

顶点着色器和片段着色器中的gl_Color和gl_FrontColor之间的关系是什么
EN

Stack Overflow用户
提问于 2011-06-22 02:26:00
回答 2查看 24.5K关注 0票数 21

我有透传顶点和碎片着色器。

顶点着色器

代码语言:javascript
运行
复制
void main(void)
{
    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

片段着色器

代码语言:javascript
运行
复制
void main(void)
{
    gl_FragColor = gl_Color;
}

这会产生空渲染(黑色,而不是像glClearBuffer那样的背景色)。

如果我修改顶点着色器,将gl_FrontColor设置为gl_Color,它会原封不动地渲染OpenGl buffer ...使用是传递着色器的预期行为。

代码语言:javascript
运行
复制
void main(void)
{
    gl_FrontColor = gl_Color; //Added line
    gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

我很困惑,顶点着色器中的gl_FrontColor设置如何更改片段中gl_Color的值?我错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-22 02:40:56

gl_Color在不同的地方有不同的含义。

在顶点着色器中,gl_Color表示用户传递的主要逐顶点颜色属性。这是使用glColorPointer获取的glColor*调用或数组数据设置的。

在片段着色器中,gl_Color表示要渲染的三角形的面的插值颜色。记住三角形有一个正面和一个背面。如果启用面消隐,则不会渲染一种或另一种(或两种)的所有面。但是,如果禁用面消隐,则会渲染两侧。

根据三角形的特定面具有不同的逐顶点输出值通常很有用。主色具有正面颜色和背面颜色,表示正面三角形和背面三角形的颜色。这些顶点着色器的输出为gl_FrontColorgl_BackColor

如果要进行双面渲染,则需要同时设置这两个值,以便片段着色器的gl_Color输入具有任何意义。如果只进行正面渲染,则只需设置gl_FrontColor

票数 36
EN

Stack Overflow用户

发布于 2011-06-22 02:31:03

gl_Color是在源中传递给顶点的颜色,因此它是一个属性。gl_FrontColor (以及BackColor)是在碎片着色器中设置gl_Color的变体,具体取决于您看到的基本体的哪一侧。所以如果你看到前面的gl_Color等于gl_FrontColor...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6430154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档