我知道你已经接受了一个答案,但我认为这个问题值得更多的评论。抱歉引用您的话顺序不正确,我将按照我认为重要的内容回答。
与其从头开始创建一个3D引擎,我决定尽可能精确地模拟现有的一个:《魔兽世界》的引擎。
然而,我想专注于实际的3D和渲染引擎,而不是界面,所以我不认为我会在这个项目中使用它[lua]。
从这两段摘录中,我可以告诉你,你并不是在试图模拟游戏引擎。只是3D渲染后端。这不是同一回事,而渲染后端部分相对于整个游戏引擎来说非常小。
顺便说一下,这可以帮助回答你的一个问题:
《魔兽世界》似乎都在使用!事实上,通常情况下它使用DirectX,但你可以通过命令行使用“-opengl”开关来使用opengl。
是的,他们实现了两者。这样做的工作量是不可忽视的,但在我的经验中,渲染后端最多占总代码的10%,通常少于这个比例。因此,实现多个后端并不是那么令人气愤。
更重要的是,今天游戏引擎的编程部分不是最大的部分。资产生产是主体(其中包括大多数游戏编程。大多数lua脚本被认为在这方面,例如)。
对于魔兽世界,OSX支持意味着OpenGL。所以他们这样做了。他们还想支持旧硬件...所以他们支持DX8级别的硬件。这已经是3个后端了。我不知道他们实际实现了多少,但归根结底,这取决于他们想要覆盖的客户群。
在游戏引擎中使用多个后端几乎是必需的,以适应所有图形卡/操作系统/平台。我没有见过一个真正的游戏引擎不支持多个后端(即使第一方标题也倾向于支持备用后端进行调试)。
好的,这取决于你想从中获得什么。我可以补充说,你的选项列表并不完整:
-DirectX9
-DirectX10
-DirectX11
-OpenGL <3.1(在弃用API之前)
-OpenGL >=3.1
-OpenGL ES 1.1(仅在需要时。它不能编程)
-OpenGL ES 2.0
是的,这些API足够不同,您需要决定要处理哪些。
如果你想学习3D渲染的基础知识,任何一个都可以。OpenGL < 3.1往往会隐藏许多最终必须在用户代码中发生的事情(例如矩阵操作,请参见
this plug)。
DX SDK附带了许多示例,有助于理解基本概念,但它们也倾向于在开始时使用最新和最大的DX功能,即使不一定需要(例如使用几何着色器来呈现精灵...)。
另一方面,大多数GL教程倾向于使用在现代硬件上基本上无法执行的功能(例如glBegin/glEnd、选择/拾取...请参见从GL 3.1中删除的内容列表或
this other plug),并且往往为许多事物种下错误的概念。
“在现实世界中最常用的是哪个?”
对于游戏而言,在PC世界中DirectX9是标准。远远超过其他。但是,我期望DirectX11将获得更多市场份额,因为它允许进行一些更多线程的工作。不幸的是,它比DX9复杂得多。
“反正没人使用OpenGL(非常非常少的人知道秘密开关)。”
问问Mac所有者他们的看法。
附带问题,如果真是这样,硬件供应商会花费精力在OpenGL驱动程序上吗?(我意识到我概括了您的评论,抱歉)?有实际的用途。虽然在游戏中不太常见。而且苹果通过iPhone使OpenGL变得更加重要(实际上是OpenGL ES)。
如果这是通常做的事情,程序员通常会创建自己的3D引擎“包装器”,对吗?
这通常是引擎设计的一个完整部分。请注意,它并没有在同一级别上抽象API,通常更多地是“用所有的铃铛和哨子在那里画出来”。应用于该绘图的渲染算法往往是后端特定的。
然而,这非常依赖于游戏引擎。如果您想更好地理解,可以看看UE3,它刚刚免费发布(啤酒)供非商业使用(我还没有看过,所以不知道他们是否公开了后端,但值得一看)。
回到我的评论,游戏引擎不仅意味着3D,看看这个。