2014-04-19 34 views
0

我有一些问题需要使用Vector3类,主要是因为它是一个结构,另外还因为它在组件更改时不会引发事件。围绕SharpDX向量结构包装Vector类 - 性能?

最后,我希望能写_camera.Position.Z += 0.1f;

这是不可能的SharpDX.Vector3,因为它是一个结构,我不能修改它的成分(因为调用_camera.Position当返回副本)。

此外,没有像ComponentsChanged这样的事件,我会更新我的相机视图矩阵。

我决定创建一个包装围绕的Vector3 结构,这还提供了这样的事件。因为调用_camera.Position会给我一个参考,那么我也可以直接修改Z组件。

但是,我怀疑这是否是一个好的主意,因为性能的原因。

  • 将Vector3移动到类中真的很好吗?
  • 每次Vector3组件改变时(即使没有/一个/更少的订户),引发一个事件是不是很糟糕?

回答

2

使用存储向量的结构是正确的格式,因为它在空间上效率更高,并且直接映射到底层C++ API预期/返回的本机格式。

因此,在一个结构体上的每个组件上引发一个事件是很糟糕和不常见的。结构是轻量级数据,节省空间,在D3D的情况下,用于本地互操作。通常会在持有值类型的类(例如相机组件)上引发事件。这是一般在.NET中有效的建议,并在整个.NET框架中广泛使用。