在OpenGL中同时使用可编程和固定管线功能

4
我有一个顶点着色器,用于转换顶点以创建鱼眼效果。能否仅使用顶点着色器并使用固定管线处理片段部分?
基本上,我有一个不使用着色器的应用程序。我想使用顶点着色器应用鱼眼效果来转换所有顶点,然后由应用程序负责照明、纹理等方面。
如果不可能,请问是否可以通过更改gl帧缓冲区内容来实现鱼眼效果?
谢谢!
2个回答

3
如果您的代码是固定功能的,则您所描述的是一个问题 - 这就是为什么将图形代码放在着色器中很好的原因:它们让您轻松更改任何内容。记得在下一个项目中使用它们。 :)
好的,但对于这个特定的问题,我假设您现在不想从头开始重写渲染到着色器...
您提到您想要一个“鱼眼效果”。看起来您很幸运,因为我相信您不需要着色器来实现该效果!如果我们谈论的是同一种效果,那么您只需将OpenGL固定功能中的GL_PROJECTION矩阵替换为具有更宽视角的透视矩阵即可实现该效果。

你可以通过创建更宽的视场来实现吗?http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/fisheye/ 如果可以,那么你是对的,我很幸运。我想我应该把它称为鱼眼投影。 - Adham
嗯,这个东西看起来更复杂了;我指的是在Quake中设置高视场角(120或者90而不是90)时产生的效果,有时也称为“鱼眼”。就你发布的内容而言,确实需要着色器,我认为...或者你可以在CPU上转换顶点?你有很多吗? - Kos
我现在对任何事情都持开放态度,因此没有关系。你会如何在 CPU 上转换顶点? - Adham
我指的是放弃使用投影/模型视图矩阵堆栈,在客户端代码中自己转换顶点,然后再将它们发送到OpenGL...不,等等-这可能会起作用(尽管效率低下),但几乎会破坏你的光照。因此,着色器是我认为的最后选择 - 幸运的是也是最好的选择;你只需要在GLSL中重新实现光照(不难),就能完全享受可编程管线的优点。我建议不要回避这一点。 - Kos

1

是的,这是可能的,尽管一些显卡(特别是ATI)不支持在没有片段着色器的情况下使用顶点着色器。


如果我只编译并使用了顶点着色器,那么应用程序执行的其他操作,如纹理和光照,是否会保留? - Adham
我尝试了这个,但似乎不起作用。几乎所有的东西都是黑色的。 - Adham
我认为Matias的结论可能是“在某些硬件上可能是可能的,但那是一种不可靠的黑客行为,不要这样做”。 - Kos
你是怎么做到的?用什么硬件? - Dr. Snoopy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接