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

OpenGL-固定管道着色器默认值(使用着色器模拟固定管道),opengl,shader,pipeline,fragment-shader,vertex-shader,Opengl,Shader,Pipeline,Fragment Shader,Vertex Shader,有人能给我提供类似于固定函数管道的着色器吗 我最需要默认的片段着色器,因为我在网上找到了一个类似的顶点着色器。但是如果你有一双,那就好了 我想使用固定管道,但具有着色器的灵活性,因此我需要类似的着色器,以便能够模拟固定管道的功能 非常感谢 我是新来的,所以如果你需要更多信息,请告诉我:D 这就是我想要复制的:(纹理单元0) glTranslatef的功能 glColor4f的功能 glTexCoord2f的功能 glVertex2f的功能 glOrtho的功能(我知道它在幕后用着色器做了一些神

有人能给我提供类似于固定函数管道的着色器吗

我最需要默认的片段着色器,因为我在网上找到了一个类似的顶点着色器。但是如果你有一双,那就好了

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

非常感谢

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

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

  • glTranslatef的功能
  • glColor4f的功能
  • glTexCoord2f的功能
  • glVertex2f的功能
  • glOrtho的功能(我知道它在幕后用着色器做了一些神奇的事情)
就这样。这就是我想从固定功能管道复制的所有功能。有人能给我举个例子,说明如何用着色器复制这些东西吗?

Se还有一个问题:它们指向一些web资源的位置


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


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

这里有几个问题,这将使使用着色器实现此功能更加困难

首先,除了使用固定功能外,您还使用即时模式。在过渡到着色器之前,应切换到顶点阵列。您可以编写一个类,该类采用类似立即模式的命令,这些命令位于
glBegin(…)
glEnd(…)
之间,如果您确实需要以这种方式构造软件,则可以将它们推入顶点数组

至于
glTranslatef(…)
glOrtho(…)
这些都没有什么特别之处。它们创建平移矩阵和正交投影矩阵,并将“当前”矩阵乘以该矩阵。目前还不清楚您使用的是哪种语言,但这些函数的一个可能的替代品可能是使用类似(C++)的库

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

这就是为什么您希望“使用固定的函数管道,但具有着色器的灵活性”从根本上说毫无意义


话虽如此,在OpenGL兼容模式下,GLSL中有一些保留字引用了许多固定函数构造。这些工具包括
gl\u Multitexoord
gl\u ModelViewProjectionMatrix
等。它们可以用作过渡辅助工具,但从长远来看确实不应该依赖它们。

没有默认着色器,尝试用一个着色器来模拟旧的ffp是一个非常糟糕的主意。然后有人能给我展示类似的着色器吗?我想用两个着色器来模拟它,frag和vert,但我在网上发现了一个类似的vert。类似于什么?可以在FFP GL中设置大量可能的状态,这些状态将在着色器中重新绘制不同的代码路径。考虑单独使用所有纹理环境模式进行纹理处理。“我想使用固定流水线,但有着色器的可挠曲性”将不会以任何有用的方式工作。如果考虑每个纹理单元应用的各种状态,则模拟整个固定函数流水线将是非常困难的。您可以为每个纹理单元创建一个纹理矩阵、一组纹理坐标等。考虑到现代OpenGL实现所需的16个纹理图像单元,在您能够复制此行为之前,很可能会用完制服和顶点属性插槽:)我理解这个问题,我用我想要复制的确切函数集更新了帖子。