固定功能与着色器:适合初学者?


16

我目前正在上大学,攻读计算机科学。尽管我确实计划在某个时候利用现有的引擎来制作一款小型游戏,但我现在的目标是学习基础知识:即3D编程。我已经对DirectX和OpenGL之间的选择进行了一些研究,由此得出的普遍看法是,无论您选择OpenGL还是DirectX作为培训平台,很多知识都可以转移到其他平台上。因此,由于OpenGL得到更多系统的支持(可能是选择学习内容的愚蠢理由),所以我决定首先学习OpenGL。

做出学习OpenGL的决定后,我进行了更多研究,发现我一直都不知道这种二分法:固定功能OpenGL与基于现代可编程着色器的OpenGL。起初,我认为学习基于着色器的OpenGL是一个显而易见的选择,因为这是当今行业中最常用的。但是,然后我偶然发现了Jason L. McKesson 非常受欢迎的“ 学习现代3D图形编程”,位于:http : //www.arcsynthesis.org/gltut/

我通读了介绍性文章,并在“关于本书”部分中指出:

“首先,当用户遇到必须通过可编程性解决的图形问题时,必须不可避免地放弃使用这种方法学到的很多知识。可编程性会抹去几乎所有的固定功能流水线,因此知识不容易转移。”

但同时也说明固定功能为初学者提供了更轻松,更直接的学习曲线,方法是:

“通常认为,使用固定功能管线教新手图形程序员最容易。”

自然地,您可以理解为什么在学习哪种范式上可能会产生矛盾:我是否花了大量时间学习(然后在随后的学习中)固定功能的方式,还是选择从着色器开始?我主要关心的是现代可编程着色器以某种方式要求程序员已经了解固定功能管线,但是我怀疑情况确实如此。

TL; DR =作为一个有抱负的游戏图形程序员,通过固定功能或基于现代着色器的编程学习3D编程是我的最大利益吗?


也有一些类似的问题……
notlesh 2012年

“同时,固定功能为初学者提供了一条更轻松,更直接的学习曲线,理由是:”我很好奇。那到底是怎么回事呢?因为引号清楚地表明:“ 通常认为这是最简单的……”(加了强调)。如上,它可能被认为是正确的,但这并不意味着它是正确的。
Nicol Bolas'7

是的,这是一种尴尬的措辞方式。
罗布·海斯

固定功能管道在OpenGL和DirectX中均已弃用,因此我不会浪费您的时间。基本着色器非常简单明了,并且当然不比理解足够复杂以使渲染上下文正常工作要复杂。
3Dave 2012年

Answers:


30

我不认为从固定功能的东西开始更容易。固定功能可能会让您用更少的代码来完成某些事情-例如,在固定功能OpenGL中,您可以通过执行操作glEnable(GL_LIGHTING)和一些其他调用来获得一些非常基本的照明/阴影。问题在于,一旦您想要一些稍微不同的东西(例如,每个像素的照明而不是每个顶点的照明),您就必须完全放弃固定功能的东西,并编写一个着色器以实现所使用的所有固定功能之前,再加上您想更改的内容。

似乎一直使用着色器会更简单,更容易混淆。着色器确实需要更多的设置工作,因为您有一个单独的源文件需要加载和编译,需要一些额外的C调用来查找和设置参数,等等。但是一旦有了着色器,这是最简单的事情编写一些不同的效果,尝试不同的想法,等等。您无需担心固定功能系统的局限性以及它是否可以做您想做的事情;着色器可以执行您可以编写代码的任何事情,以对性能和内存的通常限制进行模运算。


太好了,谢谢您的回应。我很可能最终只会选择着色器。
罗布·海斯

3
+1-也有点像“学习C ++”和“学习BASIC”。学习C ++将花费更多时间,但从长远来看,您将会学到更多。
乔纳森·迪金森

3
我想推荐opengl-tutorial.org。该站点很好地解释了基础知识,仅使用着色器。
2012年


2

我第二次直接去着色器。这不是真的更难成立,而当你传递的第一道关卡,你必须在你的指尖满功率。

更重要的是,您会发现着色器编程与您在大学的书籍和图形讲座中看到的数学方程式更加匹配。


0

我建议使用固定功能管道作为程序的基础。我发现使用它而不是纯粹的着色器来显示某些内容会更容易。然后,当您知道自己没有弄乱顶点或法线时,就可以缓慢但确定地步入阴影世界。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.