【问题标题】:What's the distinction between an "entity" and a "game object"?“实体”和“游戏对象”有什么区别?
【发布时间】:2015-01-12 08:15:43
【问题描述】:

我正在开发一个 3D 引擎 API(一个渲染引擎,而不是游戏引擎本身),并试图让类名正确。

在我的系统中,我有很多组件,例如“相机”、“变换”、“灯光”、“材质”等,其中包括我称为“对象”的另一种组件类型。

每个“对象”都有一个链接到每个其他组件类型,即。指向“相机”的链接、指向“素材”的链接等等。

相当标准的东西。

我的问题是——应该称为“对象”或“实体”,还是其他什么?

谁能给我指点关于这些概念的经典文献?对许多人来说似乎是个人喜好问题,但为了最大限度地理解文档,我想明确这一微妙之处。

【问题讨论】:

  • 我不认为该领域的文献不代表其作者的个人品味。问题是您的“对象”到底是什么以及为什么它包含指向这些组件的链接 - 我希望这里有某种形式的继承。如果这些对象是场景图的一部分,也许“节点”是正确的强调这一点。如果他们纯粹是编程“助手”,将这些组件组合成一个列表“对象”或与编程相关的其他东西会更好。 “实体”作为抽象的“存在的东西”可能并非如此,因为“物质”更像是实体的属性。
  • 啊哈是的——所以“对象”意味着 OOP。 “材料”可以被视为“实体”的“方面”或属性。我想我只是想了解人们心中的含义,这很有帮助。
  • "Object" 并不会严格暗示 oop,因为它也可以指代真实世界的对象——但我认为在这种情况下,大多数人在听到它时都会想到 oop。同样,对于“方面”或“属性”,上下文很重要。虽然方面对我来说似乎更通俗或更抽象,但属性是在描述“材料”等的上下文中听到的。这完全取决于您所考虑的设置。如果涉及着色器,有些人可能会将“属性”视为特殊GLSL 中的 shader 变量,所以如果你想强烈关注 GLSL,你可能想要别的东西,但我认为没关系。
  • 我想说:材料可以被视为实体的属性。 (但事实并非如此)。

标签: naming-conventions game-engine naming


【解决方案1】:

我见过很少的 webgl javascript 引擎。每个人的术语都不同。

“实体”和“游戏对象”的区别?

通常,物体是您可以通过视觉和/或触觉感知的东西。而实体可能只能用第六感感知或根本不感知(场景中的两个摄像头无法相互感知)。每个对象都是实体,但不是每个实体都用对象表示。

在编程方面, 相机、灯光、模型、场景,所有这些都需要位置、旋转和缩放。还有很多东西是依赖的,所以这里有另一个重要的词:节点。

在 OOP 层次结构中节点是第一个。它只有一个父节点,但第一个节点没有父节点,以及零个或多个子节点。 实体扩展节点。它有位置、旋转、比例+父、子。每一次转变都会影响到所有的孩子。 对象扩展实体。对象可能具有其他各种属性,例如一组网格,(每个对象由一个或多个网格组成,每个网格都有材料)。

提示:

有时在 OOP 层次结构中拥有 3 个不同的对象是没有用的。大多数引擎将它们合并为单个对象或两个对象,并且不同的组件可能会排除构造函数中的属性。例如,全局光不需要位置、旋转或缩放。定向光不需要位置和比例,但需要旋转。但是仅仅因为两个组件而扩展整个 OOP 层次结构是不值得的。

在 playcanvas 中它的名字是 Entity。在threejs中,它的名字是Object3D。名称也可能是 GraphNode 或 Node,因为它在 cocos2d(它是 2d 引擎)中。

我没有任何文献,但我同意 Thomas 的观点:尽量避免使用 Object、Node 之类的词,因为它令人困惑。我认为将其合并在一起的最佳名称是实体,但它与或多或少或对单词本身的描述无关。最重要的是,您和其他人认为什么是令人困惑的。

【讨论】:

  • 顺便说一句,这部分就像超级重要的“每个对象由一个或多个网格组成,每个网格都有材料”,因为如果你曾经使用过搅拌机或其他工作室,你应该知道导出的模型是一组网格层次结构,有时甚至更多。您将不得不选择您的引擎可以使用哪些类型的模型(兼容)。
  • 在OOP中,一般来说,每个对象(类的实例)都可以通过多重继承有多个父对象,所以这里的节点不好,因为OOP。但是我确实同意节点很好,因为看起来您正在构建场景图,并且图论中的“连接点”被称为节点。此外,在场景图中,每个节点应该只有一个父节点,因为它的位置必须被一系列变换固定到根节点。同样,用图形术语来说,一个节点通常可以有多个父节点 = 向内边。
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多