通过投影,我的意思是,获取 3d 模型数据、相机数据等,并将场景投影到将要显示的平面 2d 图像中。
directx / opengl 会这样做吗?他们实际上是为游戏/图形设计师做的,还是您必须使用 opengl / directx 实现 3d 到 2d 投影?这就是我感到困惑的地方。
通过投影,我的意思是,获取 3d 模型数据、相机数据等,并将场景投影到将要显示的平面 2d 图像中。
directx / opengl 会这样做吗?他们实际上是为游戏/图形设计师做的,还是您必须使用 opengl / directx 实现 3d 到 2d 投影?这就是我感到困惑的地方。
嗯,这取决于我们谈论的是哪种计算机图形。例如,您通常可以在视觉效果(如 ILM、Digital Domain、Weta Digital)和计算机动画电影(如皮克斯、梦工厂动画、迪士尼动画、蓝光天空)中看到的图像是由专用渲染器软件离线生成的。这种离线渲染器可以通过多种方式实现。可能有光栅器(与 OpenGL 或 DirectX 3D 不同)或光线追踪器(完全不同),甚至还有混合。
OpenGL 和 DirectX 3D 是用于通过光栅化生成实时图像的 API ,我将对其进行解释。首先您必须了解的是,从 OpenGL 和 DirectX 3D 的角度来看,没有 3d 模型、没有相机、没有场景。对于他们来说,只有一个帧缓冲区(一个 2d 画布),他们只将点、线或三角形栅格化(=绘制)到该帧缓冲区。当光栅化这些图元时,各种输入数据都会影响该过程,例如控制模拟照明过程的图像(纹理)或参数。
在当前系统中,该过程是 4 折的。
几何数据被转换为所谓的剪辑空间中的位置。这是由称为顶点着色器的阶段完成的。实际上它所做的是,对于图元的每个角,它需要一个输入向量(可以是任何东西)并从中计算剪辑空间中的位置。你问的投影发生在这一步——但整个事情还有很多。请继续阅读。
(可选)镶嵌着色应用于由上一步中生成的位置定义的图元。镶嵌可以被认为是一种程序控制的细化,使事物看起来更平滑或具有更高的细节。
(可选)几何着色可以将目前生成的图元转换为新的图元。例如,这对于生成模拟头发很有用
片段着色计算被光栅化的基元覆盖的每个片段的最终颜色。一个像素至少有一个片段,但使用抗锯齿可能会有更多。
现在 OpenGL 和 DirectX 3D 在哪里输入图片?好吧,在 OpenGL-2 和 DirectX-8 之前,上述步骤被硬编码到它们中,所以实际上他们做到了。如今,现代 OpenGL 和 DirectX 3D 更像是一个多功能的图形工具包,熟练的程序员可以使用它来实现自己的图形生成管道。步骤 1 到 4 由所谓的着色器程序完成,这些程序必须由使用 OpenGL 或 DirectX 3D 的程序员编写才能使整个工作正常进行。