DirectX Vs OpenGL
3D编程的第一个问题就是用何种API:OpenGL还是Direct3D?以下是它们的一些比较(从网上文献整理而得):
- 操作系统平台:
如果你的操作系统是Windows,你可以选择。如果是Unix、Linux等,那么就只能用OpenGL。 - 易学易用性:
OpenGL相对来说比DirectX易学,能够很快入门(这是公认的)。即使你将来可能要用到Direct3D,OpenGL仍然不失为一种好的3D编程的入门途径,OpenGL中原汁原味的3D函数简直和大多数计算机图形学教材中的伪代码一模一样。 - 文档支持:
在网上你可以找到很多很好的OpenGL的文档、教程、例程等,特别是“红宝书”。但是,DirectX SDK所提供的文档难嚼多了(公认),在网上你也难以找到好的教程。另外,书店里有不少OpenGL的中文书,而DirectX的书相对较少。 - 关于COM:
DirectX是基于COM的,而OpenGL不是。如果你对COM不是那么感冒的话,最好先选择OpenGL。但是,如果你将一直在Windows平台上做3D编程的话,总应该熟悉Direct3D,因为Microsoft/SGI/HP共同开发中的一种新的3D接口是基于COM的,它将和Direct3D比较接近。 - 移植性:
DirectX与Windows紧密相连,难以移植。而OpenGL是一种非常“干净的”API,无论从VB语言到VC语言、还是从Windows平台到Linux平台(几乎一样的C代码)的移植都非常容易(并且在GLUT里提供了平台无关的窗口管理库)。 - 多媒体性能:
由于DirectX包括了DirectSound、DirectInput等,如果Direct3D和它们一起使用,将比较容易控制声音、操纵杆等,这是DirectX的整体优势。当然,没有人反对你同时使用OpenGL和DirectSound,Quake就是这样做的。 - 速度:
很难说哪个更快,QUAKE用的是OpenGL的引擎,而Unreal用的是Direct3D,它们都非常著名。其实,程序的速度并不在于你选择了OpenGL或DirectX,它还至少和两个因素有关:代码的质量(依赖于对所使用的接口的熟悉程度)、硬件的支持(包括硬件的驱动程序的支持)。 - 强壮性:
这样说吧,OpenGL调用发生了错误,它什么都不做;而DirectX出了错,它什么都做得出……