我需要片段着色器默认最多,因为我在网上找到了类似的顶点着色器.但如果你有一双应该没问题!
我想使用固定管道,但具有着色器的灵活性,所以我需要类似的着色器,所以我将能够模仿固定管道的功能.
非常感谢你!
我是新来的,所以如果你需要更多信息告诉我:D
这就是我想要复制的内容:(纹理单元0)
> glTranslatef的功能
> glColor4f的功能
> glTexCoord2f的功能
> glVertex2f的功能
> glOrtho的功能(我知道它使用着色器在幕后做了一些神奇的事情)
而已.这就是我想要从固定功能管道复制的所有功能.谁能告诉我一个如何用着色器复制这些东西的例子?
你有几个问题,这将使使用着色器实现这一点更加困难.首先,除了使用固定功能功能外,您还使用立即模式.在转换到着色器之前,应切换到顶点数组.您可以编写一个类,它接受glBegin(…)和glEnd(…)之间的类似模式的命令,如果您绝对需要以这种方式构建软件,则将它们推送到顶点数组中.
至于glTranslatef(…)和glOrtho(……),这些都没什么特别的.它们创建平移矩阵和正交投影矩阵,并乘以“当前”矩阵.目前还不清楚您使用的是哪种语言,但这些功能的一种可能替代方法可能来自使用像glm
(C)这样的库.
最大的障碍是摆脱固定功能管道思考的“当前”状态心态.使用着色器,您可以完全控制几乎每个状态,并且您不必使用乘以“当前”矩阵或设置“当前”颜色的函数.您只需将着色器所需的确切矩阵或颜色值传递给着色器即可.这是解决这些问题的一种更好的方法,这就是为什么我真的认为你应该完全放弃固定功能方法而不是试图模仿它.
这就是为什么你希望“使用固定功能管道但具有着色器的灵活性”从根本上没有多大意义.
说了这么多,在OpenGL兼容模式下,GLSL中有一些保留字引用了许多固定功能结构.这些包括诸如gl_MultiTexCoord< N>,gl_ModelViewProjectionMatrix等等.它们可以用作过渡辅助,但从长远来看确实不应该依赖它们.