很多视频游戏使用像OpenGL这样的库。
首先,OpenGL不是一个库,而是一个API(规范)。OpenGL API可以以软件库的形式实现,但现在更常见的是以驱动程序的形式实现OpenGL,将OpenGL函数调用转换为控制命令,发送到坐落在图形卡(GPU)上的图形处理器。
所有我看过的这类库的教程都展示了如何编写告诉计算机绘制某些东西的代码。
是的,因为需要绘制物体才能利用它们。
问题在于,如今的游戏中,一切都是使用Zbrush、Maya或3ds Max等软件建模的。
此时,模型只是由大量数字组成的列表,还有其他数字表示这些数字形成某种几何形状的方式。这些数字并不是一种可直接使用的图像。
这些模型被纹理化并且已经准备就绪。
它们只是一堆数字,其中还有一些额外的数字来控制纹理。纹理本身也只是数字。
看起来你只需要编写一个动画循环来绘制模型并进行重复更新,而不是实际编写绘制每个小物体的代码。
那么你认为这个绘制会发生在哪里呢?没有什么神奇的“这里有一个模型,将其显示”函数。因为首先由组成模型的数字可能具有任何类型的含义。所以必须有一些程序给这些数字赋予意义。这就是渲染器。
再次说明,没有什么神奇的“绘制它”的函数。绘制模型涉及到遍历其每个数字,将其转换为向GPU发出的绘图命令。
那将会非常耗时,并且会使模型变得无用。这句话并不正确。模型控制OpenGL命令的发出。或者你认为OpenGL被用于实际“创建”模型吗?
那么OpenGL或Direct 3D在视频游戏和3D艺术中的作用是什么?它们用于将从建模软件保存下来的3D模型数字转换为令人愉悦的东西。
当模型完成时,图形尚未创建。创建的是模型和一些辅助数据,如纹理和着色器,然后在程序执行时间实时将其转换为图形。
既然一切都已经创建好了,只需要加载和绘制,那么OpenGL或Direct 3D对此有什么关键作用呢?
加载后,模型只是一堆数字。而绘图意味着将这些数字转化为可视化的内容,这需要使用类似OpenGL或Direct3D的API向图形处理器(GPU)发送绘图命令。
它们主要用于着色器和特效吗?
它们用于将3D建模程序(Blender、Maya、ZBrush)生成的数字转化为实际的图片。