DirectX与OpenGL游戏开发

时间:2011-08-25 21:20:10

标签: opengl directx

关于制作专业游戏时使用的图形平台(如魔兽世界,星际争霸2,暗黑破坏神3等),我有几个问题。

首先,如果使用OpenGL而不是Direct X渲染,WoW看起来会有什么不同?如果在OpenGL中渲染,性能会有显着差异吗?

第二,创建游戏时的主要过程是什么,特别是在使用Maya中创建的模型或视频游戏中的3DS Max时?是否创建模型,然后将模型导出为可读的OpenGL / DirectX代码,导出所有着色器程序,并在代码中创建所有顶点和三角形,最后在C ++ / c程序中使用代码?

OVerall,我很好奇视频游戏设计师/程序员如何将实际的3DS MAX / Maya模型导出到他们的代码中

5 个答案:

答案 0 :(得分:5)

  

首先,如果在OpenGL中渲染,而不是Direct X,那么WoW看起来会有什么不同?

在OpenGL中呈现(好吧,它可以是一个设置)。不,它在D3D渲染中看起来并不相同。 (注意:DirectX 更多而不仅仅是Direct3D。)

  

如果在OpenGL中渲染,性能会有显着差异吗?

不太可能。有些事情可以让OpenGL实现更快,但WoW不会使用它们中的任何一个。

  

是否创建模型,然后将模型导出为可读的OpenGL / DirectX代码

OpenGL和Direct3D都没有模型格式。此时甚至不推荐使用.x文件;那些是D3DX库的一部分,它只是D3D之上的微软编写层。

其次,您不会将它们导出为“代码”。您可以将它们导出到文件中,然后在游戏中读取这些文件。好吧,一般来说,你将这些文件处理成游戏的更易消化的格式,因为出口商倾向于以不同于你在游戏中想要的方式优化网格。

所以它导出到文件 - >处理到最终文件 - >在游戏中阅读。

答案 1 :(得分:3)

  

首先,如果使用OpenGL而不是Direct X渲染,WoW看起来会有什么不同?如果在OpenGL中渲染,性能会有显着差异吗?

OpenGL和Direct3D遵循类似的原则:顶点流进入,变换(固定函数或顶点着色器),变换后顶点被分组为基元(点,线,三角形)和基元栅格化,即,对于每个像素,基元覆盖一些计算(再次是固定功能或通过可自由编程的片段着色器),其执行确定所谓的“片段”颜色。最后,它测试了片段的可见性,并融入了画中画进度。

后来的OpenGL和DirectX版本增加了几何和细分阶段,但这些只是细节。

在所有其他方面,它们的工作方式非常相似,除了由不同剪辑空间映射在顶点位置引入的舍入误差外,渲染结果之间几乎没有区别。

  

第二,创建游戏时的主要过程是什么,特别是在使用Maya中创建的模型或视频游戏中的3DS Max时?是否创建模型,然后将模型导出为可读的OpenGL / DirectX代码,导出所有着色器程序,并在代码中创建所有顶点和三角形,最后在C ++ / c程序中使用代码?

没有!模型及其辅助数据与代码分开存储。虽然它肯定可以在代码中存储几何,但这是一个相当糟糕的想法,不应该这样做。我解释了基本思想,如何在How to Import models from 3D software, like Maya into OpenGL?

中加载模型
  

OVerall,我很好奇视频游戏设计师/程序员如何将实际的3DS MAX / Maya模型导出到他们的代码中

他们没有。他们将模型导出为优化的文件格式,以便通过3D引擎进行高效加载,然后引擎从文件加载模型和辅助数据。这不是某种黑巫术魔法。整个过程与从文件加载图像并将其显示或将某些音乐播放到扬声器的过程差别不大。为了给3D模型设置动画,模型包含额外的控制信息(骨架,骨骼等),这些信息允许基于相当少的参数(手臂旋转,查看方向等)使其变形。然后这些参数会发生变化。 / p>

答案 2 :(得分:1)

你问的是一个很大的问题,但至少是它的“第二”部分 - 非平凡的模型是在你描述的软件包中创建的,但它们通常会被导出到基本上代表列表的数据文件中。几何。然后,这些文件由游戏的资源加载器读入,并放入顶点数组或缓冲对象等。这样,数据就独立于代码。

硬编码几何体通常用于小型固定物,也适用于教程项目。 :)

答案 3 :(得分:0)

您的第一个问题实际上无法回答 - 两个图形库都允许我通过API访问底层图形硬件。游戏的外观在很大程度上取决于API的使用方式。如果我在OpenGL中将后备缓冲区设置为红色,它看起来就像在DirectX中将后备缓冲区设置为红色一样。如果我在OpenGL中进行与DirectX相同的光照计算,我会看到相同的结果,依此类推。产生的任何差异都可能是由于API不相同而导致程序员解决问题的结果。

来自3D建模程序(例如Maya或3DsMax)的模型不会被“编码”,它们会被导出为游戏可以理解的格式。这些可以是基于XML的格式,例如Collada,基于文本的格式(例如OBJ),甚至是专有的二进制格式。重要的是,来自建模程序的数据以可以读入并转换为几何的内部表示的格式提供给游戏。几乎每个游戏引擎都以略微不同的方式处理几何体。

从技术上讲,我可以保存以下文件:

V1  0.0, 0.5, 0.5
V2 -0.5,-0.5, 0.5
V3  0.5, 0.5, 0.5

M1 V1, V2, V3

只要游戏理解该文件包含三个顶点(V1V2V3)和一个由这三个顶点组成的网格(M1),并且知道如何将其读入我们可以渲染的格式,我们将在商业中并且可以将该三角形绘制为场景作为网格。顺便提一下,这种格式离OBJ格式不远。

大多数出口商都比这复杂得多,大多数引擎都支持更复杂的几何表示,以解释这些(强大的)建模工具可以为我们提供的所有额外数据。

答案 4 :(得分:-1)

这是一个很难回答的非常大的问题。

关于directX和Opengl,它们在功能和性能方面没有太大差异(可能)。

DirectX始终比Opengl领先一步。例如,它首先支持硬件细分功能,然后一段时间后,此功能出现在Opengl中。但这不是什么大问题,因为当你开发游戏时,你将不得不支持一系列机器,包括那些低性能机器。因此,在它变得非常普遍之前,您可能无法使用新功能。

是的,游戏开发者使用Maya和3Ds max类软件来创建游戏模型,通常他们将模型输出到模型文件。该文件由游戏的游戏引擎读入。

我不建议您从opengl或directx开始,我认为最好使用游戏(或图形)引擎。例如,食人魔3D。 http://www.ogre3d.org/

因为它同时支持directx和opengl,并且它还具有现成的3Ds max,Maya导出器,这使得轻松加载模型。

相关问题