【问题标题】:How to apply a fragment shader to only one object in OpenGL?如何将片段着色器仅应用于 OpenGL 中的一个对象?
【发布时间】:2012-11-06 12:44:40
【问题描述】:

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

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

任何澄清都将不胜感激,包括在我误解某些内容时进行纠正。

【问题讨论】:

  • 在使用着色器绘制新对象之前制作颜色统一并更改统一。

标签: c++ opengl


【解决方案1】:

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

As RobertRouhani said,使颜色统一并为每个对象更改它。


如何在 OpenGL 中只对一个对象应用片段着色器?

您可以简单地使用glUseProgram 更改着色器程序,并在它使用不同的着色器后进行渲染调用。

看到这个:https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders

【讨论】:

    【解决方案2】:

    在使用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等就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      相关资源
      最近更新 更多