如何将片段着色器仅应用于OpenGL中的一个对象?

时间:2012-11-06 04:34:36

标签: c++ opengl

我刚开始学习OpenGL。在我看过的所有教程中,他们演示了如何使用片段着色器设置视图中所有对象的颜色。我还没有找到的是如何在一个对象上使用片段着色器,为不同的对象提供不同的颜色。你是怎么做到的?

为了提供问题的背景,我在2d画了一个房子和道路的简单场景。我已经发现如何使用固定的图形管道设置我的每个对象(房子的主体,窗口等)的颜色,我只是不明白如何使用片段着色器设置颜色。

如果我误解了某些内容,我们将非常感谢任何澄清,包括更正。

2 个答案:

答案 0 :(得分:3)

在使用glDrawArraysglDrawElements绘制对象之前,将颜色作为变量传递给着色器。

http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml

样本GLSL片段着色器:

uniform vec4 u_color;

void main(void)
{
     gl_FragColor = u_color;
 }

我会扩展这个答案,但我很懒。希望它有所帮助。网上有很多教程,只需要搜索glsl,glUniform4f等等。

答案 1 :(得分:3)

  

为了提供问题的背景,我在2d画了一个房子和道路的简单场景。我已经发现如何使用固定的图形管道设置我的每个对象(房子的主体,窗口等)的颜色,我只是不明白如何使用片段着色器设置颜色。

As RobertRouhani said,使颜色均匀,并为每个对象更改颜色。


  

如何将片段着色器仅应用于OpenGL中的一个对象?

您只需使用glUseProgram更改着色器程序,然后使用不同的着色器进行渲染调用。

请参阅:https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders