OpenGL - 固定管道着色器默认值(使用着色器模拟固定管道)

时间:2013-09-14 20:36:22

标签: opengl shader pipeline fragment-shader vertex-shader

任何人都可以提供类似于固定功能管道的着色器吗?

我需要片段着色器默认最多,因为我在网上找到了类似的顶点着色器。但如果你有一对应该没问题!

我想使用固定管道,但具有着色器的灵活性,所以我需要类似的着色器,以便我能够模仿固定管道的功能。

非常感谢!

我是新来的,所以如果您需要更多信息,请告诉我:D

这就是我想要复制的内容:(纹理单元0)

  • glTranslatef的功能
  • glColor4f的功能
  • glTexCoord2f的功能
  • glVertex2f的功能
  • glOrtho的功能(我知道它使用着色器在幕后做了一些神奇的事情)

多数民众赞成。这就是我想要从固定功能管道复制的所有功能。谁能告诉我一个如何用着色器复制这些东西的例子?

2 个答案:

答案 0 :(得分:4)

这里有几个问题会使使用着色器更难实现这一点。

首先,除了使用固定功能功能外,您还使用立即模式。在转换到着色器之前,应切换到顶点数组。您可以编写一个类,它可以在glBegin (...)glEnd (...)之间执行类似模式的命令,如果您绝对需要以这种方式构建软件,则将它们推送到顶点数组中。

至于glTranslatef (...)glOrtho (...)这些并不特别特别。它们创建平移矩阵和正交投影矩阵,并乘以“当前”矩阵。目前还不清楚您使用的是哪种语言,但这些功能的一种可能替代方法可能来自使用像glm(C ++)这样的库。

最大的障碍将是摆脱固定功能管道思考的“当前”状态心态。使用着色器,您可以完全控制几乎每个状态,并且您不必使用乘以“当前”矩阵或设置“当前”颜色的函数。您只需将着色器所需的确切矩阵或颜色值传递给着色器即可。这是解决这些问题的一种更好的方法,这就是为什么我诚实地认为你应该完全放弃固定功能方法,而不是试图模仿它。

这就是为什么你希望“使用固定功能管道但具有着色器的灵活性”从根本上没有多大意义。

说了这么多,在OpenGL兼容模式下,GLSL中有一些保留字引用了许多固定功能结构。这些内容包括gl_MultiTexCoord<N>gl_ModelViewProjectionMatrix等。它们可以用作过渡性辅助,但从长远来看,实际上不应该依赖它们。

答案 1 :(得分:1)

还有这个问题:OpenGL Fixed function shader implementation他们指向一些网络资源。


OpenGL ES 2 book包含第8章(顶点着色器)和第10章(片段着色器)中OpenGL ES 1.1固定函数管道的实现。

不幸的是,这些着色器似乎没有包含在本书的示例代码中。另一方面,阅读书籍和输入代码当然是值得的。