实体组件系统 - 渲染方法

时间:2018-03-25 10:51:38

标签: c++ game-engine directx-12

我目前正在开发一个使用ECS和DirectX12的小项目,并希望就是否有“首选”方式或其他方法来解决我的问题时获得一些建议。

让我给一个可以渲染的实体提供一个非常基本的布局

<entity  name = "Cube">
  <component = Transform ..blah blah>
  <component = Mesh = "cube.txt"> // holds data about verts/indicies etc
  <component = Materials = "Mat1"> // holds data about the materials etc
</entity>
  

方法1

好的,当加载实体时会加载每个组件。它到达网格组件,现在将加载网格数据并创建所需的缓冲区并将它们存储在渲染系统中(通过能够从世界获取渲染系统)

说下一个实体出现并且还想要它与渲染系统检查的相同网格,以查看它是否已经存在,因此不需要再次加载它,而只需为该实体创建一个新副本。

  

方法2

在加载实体之前,渲染系统会有一个要预先加载的网格列表(这意味着每次新网格想要包含在系统中时需要更新的列表)。

现在当加载实体时,它们只能有一个标记来匹配渲染系统中网格上的标记

我不确定这是最好的方法,因为我开始使用方法1并且发现网格组件处理加载,这似乎是一种简单而直接的方法,但是我之前没有做过这样的ECS方法。我想得到建议,因为我可能忽略了一种更有效的更优选的方法。

我要记住以后要完成的工作的关注点是使用相同网格类型PSO等处理批处理对象的能力

由于

1 个答案:

答案 0 :(得分:0)

如果您发现第一种方法现在适合您,我会说继续使用它,直到您需要明确地将其替换为可以处理新功能的系统。

第二种方法听起来像'#34;正确&#34;这样做的方式,就像在商业游戏引擎中一样,首先在引擎启动时加载资产列表,之后的大多数操作都是在假设你需要已经存在的网格资产的情况下进行的(显然不包括程序生成之类的东西等等) )。