4

谁能给我提供类似于固定功能管道的着色器?

我最需要Fragment shader default,因为我在网上找到了一个类似的vertex shader。但如果你有一双应该没问题!

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

非常感谢你!

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

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

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

就是这样。这就是我想从固定功能管道中复制的所有功能。谁能告诉我一个如何用着色器复制这些东西的例子?

4

2 回答 2

4

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

首先,除了使用固定功能特性外,您还使用即时模式。在过渡到着色器之前,您应该切换到顶点数组。如果您绝对需要以这种方式构造您的软件,您可以编写一个类,该类接受类似于即时模式的命令,这些命令将介于两者之间glBegin (...)并将glEnd (...)它们推送到顶点数组中。

至于glTranslatef (...)glOrtho (...)这些都没什么特别的。他们创建平移矩阵和正交投影矩阵,并将“当前”矩阵乘以这个矩阵。目前尚不清楚您使用的是什么语言,但这些函数的一种可能替代方法可能是使用像glm(C++) 这样的库。

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

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

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

于 2013-09-14T22:31:00.433 回答
1

还有这个问题:OpenGL Fixed function shader implementation where they point to some web resources。


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

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

于 2013-09-14T21:47:52.803 回答