2014-03-31 102 views
2

我想从底层学习3D图形编程的基础知识。我现在不一定想学习DirectX或OpenGL,但是要真正理解表面下发生了什么。我想从一个基本的射线追踪器开始。它看起来很简单,甚至有在线教程。“低级”3D图形编程

之后,我想在DirectX或OpenGL之外的软件中实现图形管道。这是可能的还是我会试图穿过一堵砖墙。他们确实说最好的学习方法就是通过做。

+0

首先刷上你的矩阵。 –

+0

我想补充一点,我并不想成为第二个John Carmack,但是有* MODERN *书籍来解释现代图形管道背后的数学和低层次概念。我知道随着使用着色器引入可编程管道,它最近发生了变化。 –

+0

我认为最现代化的描述应该是最新的DX/OGL的规范。 – kolenda

回答

3

三维图形是一个很大的领域,回答你的问题确实需要更多关于你的目标的信息。

写一个光线跟踪器绝对是学习一些3D图形基础知识的好方法。 DirectX和OpenGL当然被设计为与基于3D渲染的光栅化硬件加速器对话,所以如果您真的想要了解3D图形卡如何在屏幕上生成三角形图像的低层次上发生了什么,软件光栅化程序将是一个很好的练习。

如果您的兴趣更多的是如何渲染3D场景的逼真图像的基础知识,那么我不一定建议专注于编写光栅化器的细节。我会专注于更多地了解诸如照明,阴影,阴影,反射和折射以及全局照明等事情。所有这些都可以在软件射线追踪器中相对简单地执行,其中很大一部分来自于试图使它们高效而不是基本原理。

如果您的目标更多的是了解3D硬件如何在低级别工作,那么这是一个完整的其他大型主题。有很好的资源来了解这一点,但如果这是你的目标,编写一个软件光线跟踪器不一定会有帮助。

+0

确实DirectX和OpenGL只是管理你的图形卡,还是它为你做了一些工作,比如从不同的坐标系转换等等......我想要做所有事情,所以我知道它是如何工作的。 –

+0

回到固定功能图形API的预着色时代,DirectX和OpenGL为您做了一些转换和照明工作。现在,在顶点和像素着色器中完成这些工作主要取决于你。现在,OpenGL和Direct3D主要处理与图形卡以及一些资源管理和同步的交谈,以及编译着色器代码。 – mattnewport

+0

因此,他们演变,他们“删除”功能? (我知道随着显卡变得越来越复杂,它们变得越来越复杂)。 –