OpenGL和Direct3D

e0uiprwp  于 2023-06-22  发布在  其他
关注(0)|答案(3)|浏览(134)

OpenGL和Direct3D的区别是什么?它们真的是不同的实现来完成相同的事情吗(就像Java和Mirosoft的CLR [.NET])?

uqjltbpv

uqjltbpv1#

它们是非常不同的图形API。但公平地说,他们大多完成同样的事情。如果你在Windows下开发游戏(或XBOX游戏),DirectX可能是首选的API,如果你想要跨平台支持,OpenGL是首选。Mac OS使用GL,iPhone也是如此,许多Windows游戏也支持OpenGL。
由于OpenGL是经过很长时间的“委员会”开发的,它带来了很多包袱--API有一些较旧的选项,这些选项在今天并不重要。这就是OpenGL ES的原因之一;它去掉了所有的垃圾,使一个更容易的目标平台。
另一方面,DirectX是由微软控制的,因此它有一个更“现代”的感觉(它基于COM组件,所以是高度面向对象的)。MS经常更新API以匹配新硬件。
有时你没有选择的奢侈品(例如iPhone不能运行DX)。但往往只是归结为个人偏好/经验。如果你是一个长期的图形程序员,你往往会非常熟悉这两个。
更新:自从我写了这篇文章,风景已经改变了很多。现在在Mac上,我们鼓励您使用Metal,尽管也可以选择使用Vulkan和“Molten”兼容层。
我们还有Vulkan和DX12。这些都是“到金属”的API,这是非常复杂的学习,但给予你完全的控制。就个人而言,我仍然建议先学习OpenGL,然后再转向DX12/Vulkan/Molten,如果你需要控制或别无选择的话。目前最好的“跨平台”解决方案是Vulkan。

vsmadaxz

vsmadaxz2#

在这种情况下,谷歌是你的朋友……有一篇很好的维基百科文章对比了这两个库:
Comparison of OpenGL and Direct3D
如果没记错的话,OpenGL是Direct3D出现之前的开放实现。Direct3D当时是基于OpenGL的......但很快就分道扬镳,成为它自己独特的库。

更新

看起来我的记忆力被摧毁了。。
Direct3D是独立于OpenGL开发的。

xzabzqsa

xzabzqsa3#

Direct3D和OpenGL是不同的API,用于完成相同的事情。
D3D和GL之间的主要区别在于D3D是面向对象的,而GL不是。D3D9和GLES2基本上具有相同的功能。事实上,如果你打算使用OpenGL,并且不需要任何GL3或GL4功能,你应该将所有代码都基于GLES2 API(所有GLES2功能都在GL2中,但不是相反)。
如果可能的话,你应该在Windows上使用D3D而不是GL,因为多线程和驱动程序支持不稳定。以上网本为例,它们在ShaderModel 2中支持D3D的HLSL,但不支持GLSL的等价物,它们只支持GL的固定管道。

相关问题