作为最大的两个3D图形API,OpenGL和DirectX一直没有停止过竞争。微软退出OpenGLARB,全力发展自己的DirectX就是一个明证。这种竞争也导致了技术的发展,至少对开发人员来说是一件好事。
DirectX本身并不完全是一个3D API,Direct3D才是。DirectX应该说是一个应用的完整解决方案,它包括DirectDraw、Direct3D、DirectSound、DirectPlay、DirectInput、DirectMusic、DirectShow、DirectSetup等部件,到了DirectX 8后的版本,DirectDraw和Direct3D就合二为一成了DirectGraphics了。
其中DirectDraw提供了通过支持访问屏外显示内存中位图的软硬件加速技术,快速直接存取,利用硬件的位块传输和缓冲区翻转功能;Direct3D提供了保留模式(Retained-Mode)接口和即时模式(Immediate-Mode)接口,前者允许程序很容易地完成一个完全的三维图形系统,后者使得程序能完全控制渲染;DirectSound、DirectMusic提供软硬件声音混合和录音再生功能;DirectPlay使得应用程序在网络之间的连接更加简单方便;DirectInput提供了基于Windows游戏输入的API和驱动程序,它不仅支持目前的键盘、鼠标和操纵杆,也支持将来的基于Windows的输入设备;DirectSetup则提供了DirectX的一次性安装过程。
作为DirectX的核心,DirectGraphics和OpenGL是“势不两立”的,要让DirectGraphics和OpenGL一起协同工作是不可能的。但是DirectX的其他部件却不这样“排外”,所以,对于OpenGL开发人员来说,我们完全可以结合OpenGL和DirectX的优势,发挥拿来主义的精神来最佳完成我们的工作。