什么程序负责计算机图形投影

时间:2013-02-08 00:15:11

标签: opengl graphics directx projection

通过投影我的意思是,获取3D模型数据,相机数据等,并将场景投影到将要显示的平面2D图像中。

directx / opengl会这样做吗?他们实际上是为游戏/图形设计师做的,还是你必须用opengl / directx实现3d到2d的投影?这是我感到困惑的地方。

1 个答案:

答案 0 :(得分:1)

嗯,这取决于我们正在谈论什么样的计算机图形。例如,您通常可以在视觉效果中看到的图像(想想ILM,Digital Domain,Weta Digital)和计算机动画电影(想想皮克斯,梦工厂动画,迪斯尼动画,蓝天)是由专用渲染器软件离线生成的。这种离线渲染器可以以多种方式实现。可能有光栅化器(与OpenGL或DirectX 3D不同)或光线跟踪器(完全不同),甚至还有混合光栅。

OpenGL和DirectX 3D是用于通过光栅化生成实时图像的API,我将解释这些。首先要注意的是,从OpenGL和DirectX 3D的角度来看,没有3D模型,没有相机,没有场景。对于他们来说,只有一个帧缓冲区(一个2d画布),它们只是点,线或三角形光栅化(=绘制)。当栅格化这样的基元时,各种输入数据都会影响过程,例如图像(纹理)或参数控制模拟照明过程。

使用现有系统,该过程是4折叠的。

  1. 几何数据转换为所谓剪辑空间中的位置。这是由一个称为顶点着色器的阶段完成的。它实际上是这样做的,对于一个基元的每个角,它采用一个输入向量(可以是任何东西)并从中计算一个位于剪辑空间中的位置。 你所询问的投射,发生在这一步 - 但整个事情还有很多。请继续阅读。

  2. (可选)Tesselation着色应用于由上一步骤中生成的位置定义的基元。 Tesselation可以被认为是一种程序控制的细化,使事物看起来更平滑或更细节。

  3. (可选)几何着色可以将到目前为止生成的图元转换为新图元。例如,这可用于生成模拟头发的链

  4. 片段着色计算原始栅格化所覆盖的每个片段的最终颜色。像素中至少有一个片段,但是使用抗锯齿可能还有更多。

  5. 现在,OpenGL和DirectX 3D在哪里进入图片?好吧,在OpenGL-2和DirectX-8之前,上面描述的步骤都是硬编码到它们中的,所以在所有实际术语中他们都是。如今,现代OpenGL和DirectX 3D更像是一个多功能的图形工具包,熟练的程序员可以使用它来实现自己的图形生成管道。步骤1到4由所谓的着色器程序完成,必须由使用OpenGL或DirectX 3D的程序员编写,以使整个工作正常。