我正在开发一个3D引擎API(一个渲染引擎,而不是游戏引擎),并试图让类名正确。
在我的系统中,我有一些组件,如“相机”,“变换”,“灯光”,“材料”等,包括另一种组件类型,我称之为“对象”。
每个“对象”都有一个链接到每个其他组件类型,即。指向“相机”的链接,指向“材料”的链接等。
非常标准的东西。
我的问题是 - 应该将其称为“对象”或“实体”,还是其他什么?
有谁能指出我关于这些概念的规范文献?对于许多人来说,这似乎是个人品味的问题,但是为了最大程度地理解文档,我希望将这种微妙之处固定下来。
答案 0 :(得分:5)
我见过很少的webgl javascript引擎。术语每个都不同。
“实体”和“游戏对象”之间的区别?
通常,对象是您可以通过视觉和/或触觉感知的东西。虽然实体可能只被感知到第六感或者根本没有被感知(场景中的两个相机不能相互感知)。每个对象都是实体,但不是每个实体都用对象表示。
在编程中 相机,灯光,模型,场景,所有这些都需要位置,旋转和缩放。还有很多东西都依赖于此,所以这里有另一个重要的词:Node。
在OOP层次结构中,Node是第一个。它只有一个父节点,除了第一个节点没有,零个或多个子节点。 实体扩展了Node。它有位置,旋转,比例+父母,孩子。每次转型都会影响所有孩子。 对象扩展实体。对象可能具有其他各种属性,例如网格集,(每个对象由一个或多个网格组成,每个网格都有材质)。
<强>提示:强>
有时在OOP层次结构中有3个不同的对象是没用的。大多数引擎将它们合并到单个对象或两个,不同的组件可能会排除构造函数中的属性。例如,全局光不需要位置,旋转或缩放。定向光不需要位置和比例,但需要旋转。但仅仅因为两个组件而扩展整个OOP层次结构是不值得的。
在playcanvas中,它的名字是Entity。在threejs中,它的名字是Object3D。名称可能也是GraphNode或Node,因为它位于cocos2d(这是2d引擎)中。
我没有任何文献,但我同意托马斯的观点:尽量避免像Object,Node这样的词,因为它令人困惑。我认为将它们合并在一起的最佳名称是实体,但它与或多或少的内容或单词本身的描述无关。最重要的是,你和其他人发现什么令人困惑。