低级别的3D图形编程

4
我希望从最基础的开始学习3D图形编程。我并不想立刻学习DirectX或OpenGL,而是真正理解表面下正在发生的事情。我想从实现一个基本的光线追踪器开始。这似乎很简单,甚至有在线教程。
在此之后,我想在DirectX或OpenGL之外的软件中实现图形管道。这是否可能,还是说我会试图穿过一堵墙?人们常说最好的学习方法是通过实践。

先复习一下矩阵知识。 - Ignacio Vazquez-Abrams
我想补充一下,我并不想成为第二个John Carmack,但是是否有现代的书籍可以解释现代图形管线背后的数学和低级概念。我知道随着可编程管线使用着色器的引入,它最近发生了变化。 - Jason Mills
我认为最“现代”的描述应该是最新的DX/OGL规范。 - kolenda
如果你更感兴趣于幕后的数学,那么“现代”的DX/OGL书籍可能不是你想要的,因为它们使用的是一段时间以来相同的数学。以下是两本非常适合探索自己制作引擎的书籍:http://www.amazon.ca/Game-Engine-Architecture-Engineering-Applications/dp/012229064X/ref=sr_1_1?ie=UTF8&qid=1396274340&sr=8-1&keywords=3D+Game+Engine+Architecturehttp://www.amazon.ca/Game-Engine-Design-Practical-Real-Time/dp/0122290631/ref=pd_sim_b_1?ie=UTF8&refRID=0A8TVW3BCFAWVTKJP5M6 - Pedrom
1个回答

4
3D图形是一个庞大的领域,要回答您的问题需要更多关于您的目标的信息。编写光线追踪器确实是学习一些3D图形基础知识的好方法。DirectX和OpenGL当然设计用于与硬件加速器通信,以进行栅格化为基础的3D渲染,因此如果您真的想了解在低级别上3D图形卡如何在屏幕上生成三角形图像的情况,编写软件光栅化程序将是一个不错的练习。但是,如果您更感兴趣的是如何渲染出3D场景的逼真图像的基本原理,那么我不建议过于关注编写光栅化程序的详细信息。相反,我会着重学习更多关于照明、阴影、反射和折射以及全局照明等方面的内容。所有这些东西都可以相对简单地在软件光线追踪器中实现,其复杂性大部分来自于尝试使它们有效而不是基本原理。如果您的目标更多地是了解低级别的3D硬件操作原理,那就是一个完全不同的大主题。有很好的资源可供学习,但是如果这是您的目标,编写软件光线追踪器并不一定有多大帮助。

DirectX和OpenGL只是管理你的显卡,还是会为你做一些工作,例如在不同坐标系之间进行转换等等?我想要做所有的事情,这样我就知道它们是如何工作的。 - Jason Mills
在固定功能图形API的pre-shader时代,DirectX和OpenGL会为您完成一些变换和照明工作。现在大多数情况下需要您在顶点和像素着色器中完成所有这些工作。现在OpenGL和Direct3D主要处理与显卡的通信以及一些资源管理和同步,以及您的着色器代码的编译。 - mattnewport
随着它们的发展,它们“移除”了一些功能吗?(我知道随着图形卡变得更加复杂,它们也变得更加复杂)。 - Jason Mills
你可以说他们“删除”了一些功能,但实际上这些功能只是变得多余并且增加了API的混乱程度。OpenGL实际上并没有完全删除固定功能支持,它只是被弃用了。固定功能变换和照明的问题在于它是“固定的”-你只能使用有限的选项来进行变换、照明和着色,这限制了你可以实现的结果的多样性和质量。曾经有一些尝试使“固定”的管道更具可配置性,但这很快就变得比编写着色器更复杂了。 - mattnewport

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