vri*_*nce 20 opengl shader pixel-shader vertex-shader
我有传递顶点和片段着色器.
顶点着色器
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)
片段着色器
void main(void)
{
gl_FragColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)
那些产生空渲染(黑色不是像glClearBuffer那样的背景颜色).
如果我修改顶点着色器以将gl_FrontColor设置为gl_Color,它会渲染未触及的OpenGl缓冲区...具有传递着色器的预期行为.
void main(void)
{
gl_FrontColor = gl_Color; //Added line
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)
我很困惑,如何设置顶点着色器中的gl_FrontColor可以更改片段1中gl_Color的值?我错过了什么?
Nic*_*las 35
gl_Color 意味着不同的地方不同的东西.
在顶点着色器中,gl_Color表示用户传递的主要每顶点颜色属性.这是使用glColor*提取的调用或数组数据设置的glColorPointer.
在片段着色器中,gl_Color表示正在渲染的三角形的面对的插值颜色.请记住,三角形有正面和背面.如果启用面部剔除,则不会呈现一种或另一种(或两者)的所有面.但是,如果关闭面部剔除,则会渲染两面.
基于三角形的特定面,具有不同的每顶点输出值通常是有用的.主色具有正面颜色和背面颜色,表示前置三角形和后向三角形的颜色.这些的顶点着色器输出是gl_FrontColor和gl_BackColor.
如果要进行双面渲染,则需要设置这两个值,以便片段着色器的gl_Color输入具有任何意义.如果您只进行正面渲染,那么您只需要设置gl_FrontColor.
| 归档时间: |
|
| 查看次数: |
21662 次 |
| 最近记录: |