gpt4 book ai didi

c++ - 我应该为真实世界的游戏引擎使用什么 3D 图形框架?

转载 作者:IT老高 更新时间:2023-10-28 22:33:07 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

4年前关闭。




Improve this question




我是一名 C++ 程序员,拥有非常丰富的服务器编程经验。然而,我现在很无聊,我决定进入一个新领域:3D 游戏编程,用于学习目的。此外,如果我决定在该领域工作,我认为这个学习项目将来可能会成为很好的简历 Material 。

与其从头开始创建一个 3D 引擎,我决定尽可能地模仿现有引擎:魔兽世界。如果你好奇为什么(可以跳过这个):

  • 这是一个现实世界成功的游戏
  • 所有 map 纹理、模型以及尚未完成的内容(我对学习如何使用 photoshop 或其他任何方法实际绘制纹理不感兴趣)
  • 他们的文件格式或多或少已经完全逆向工程
  • 已经有一个相同的开源项目 (wowmapview),如果我遇到麻烦,我可以查看它。

  • 好的,那是一个很长的前言......现在,我的主要问题如下: 我应该使用 DirectX、OpenGL、包装库如 sdl 还是什么?

    现实世界中最常用的是什么?

    而且,还有一点让我感到困惑:魔兽世界似乎同时使用了两者!事实上,它通常使用 DirectX,但您可以通过命令行使用“-opengl”开关启动它来使用 opengl。

    这在游戏中很常见吗?他们为什么这么做?我想这是很多工作,据我所知,无论如何都没有人使用 OpenGL(很少有人知道 secret 开关)。

    如果这是通常要做的事情,程序员是否通常会创建自己的 3d 引擎“包装器”,例如内部制作的 SDL,并基于开关/#defines/whatnot 决定最终调用哪个 API 函数(DirectX 或 OpenGL)?还是sdl中已经内置了这个功能(你可以随意在DirectX和OpenGL之间切换)?

    最后,你有什么书可以推荐吗?

    谢谢!

    最佳答案

    我知道你已经接受了一个答案,但我认为这值得更多评论。很抱歉乱序引用你的话,我正在回答我认为重要的问题。

    Instead of creating a 3D engine from scratch I decided to emulate as exactly as I'm able an existing one: World of Warcraft's.

    However I wanted to focus on the actual 3d and rendering engine, not the interface, so I don't think I will be using it [lua] for this project.


    从这两个片段中,我可以告诉您,您并不是在尝试模拟游戏引擎。只是 3D 渲染后端 .这不是一回事,与完整的游戏引擎相比,渲染后端部分是非常小的部分。
    顺便说一下,这可以帮助回答您的一个问题:

    World of Warcraft appears to be using both! In fact, normally it uses DirectX, but you can use opengl by starting it with the "-opengl" switch via command line.


    是的,他们都实现了。这样做的工作量是不可忽视的,但根据我的经验,渲染后端最多占总代码的 10%,通常更少。因此,实现多个方案并不令人愤慨。
    更重要的是,今天游戏引擎的编程部分并不是最大的部分。 Assets 生产是大部分(包括大多数游戏编程。大多数 lua 脚本都被考虑在这一方面,例如)
    对于 WoW,OSX 支持意味着 OpenGL。所以他们做到了。他们也想支持旧硬件……所以他们支持DX8级别的硬件。这已经是 3 个后端了。我不知道他们实际实现了多少,但这一切都归结为他们想要接触的客户群。
    游戏引擎中的多个后端或多或少需要扩展到所有显卡/操作系统/平台。我还没有看到不支持多个后端的单个真实游戏引擎(即使是第一方游戏也倾向于支持备用后端以进行调试)。

    ok, that was a long preface.. Now, my main question is the following: Should I use DirectX, OpenGL, wrapper libraries such as sdl, or what?


    嗯,这在很大程度上取决于你想从中得到什么。我可能会补充说,您的选项列表不是很完整:
  • DirectX9
  • DirectX10
  • DirectX11
  • OpenGL < 3.1(在删除弃用的 API 之前)
  • OpenGL >= 3.1
  • OpenGL ES 1.1(仅在您需要时使用。它不可编程)
  • OpenGL ES 2.0

  • 是的,这些 API 非常不同,您需要决定要处理哪些 API。
    如果您想学习 3D 渲染的基础知识,任何这些都可以工作。 OpenGL < 3.1 倾向于隐藏许多最终必须在其他用户代码中发生的事情(例如矩阵操作,请参阅 this plug )。
    DX SDK 确实附带了许多有助于理解基本概念的示例,但它们也倾向于在启动时不一定需要时使用 DX 的最新和最伟大的功能(例如,使用几何着色器来渲染 Sprite ......)
    另一方面,大多数 GL 教程倾向于使用在现代硬件上基本上性能不佳的功能(例如 glBegin/glEnd、选择/挑选,...请参阅从 GL 3.1 或 this other plug 中删除的内容列表)并且倾向于为很多事情播种错误的概念。

    What's the most used one in the real world?


    对于游戏,DirectX9 是当今 PC 世界的标准。差远了。
    但是,我希望 DirectX11 能够获得更多的市场份额,因为它允许进行更多的多线程工作。不幸的是,它比 DX9 复杂得多。

    nobody uses OpenGL anyway (very very few people know about the secret switch at all).


    询问 Mac 用户他们的想法。
    附带问题,如果情况确实如此,您是否真的认为硬件供应商会在 OpenGL 驱动程序上花费任何精力(我意识到我概括了您的评论,抱歉)?它有现实世界的用法。虽然在游戏中并不多。 Apple 通过 iphone 使 OpenGL 更加相关(实际上是 OpenGL ES)。

    If it's something usually done, do programmers usually create their own 3d engine "wrapper",


    它通常是发动机设计的完整部分。请注意,它不是在同一级别抽象 API,它通常更像是“在那里绘制所有花里胡哨的东西”。应用于该绘图的渲染算法往往是后端特定的。
    然而,这非常依赖游戏引擎。如果你想更好地理解,你可以看看UE3,它刚刚得到 released free (beer) for non-commercial use (我还没有看,所以我不知道他们是否暴露了后端,但值得一看)。
    回到我的评论,游戏引擎不仅仅意味着 3D, look at this .

    关于c++ - 我应该为真实世界的游戏引擎使用什么 3D 图形框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691538/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com