2014-04-19 36 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框架中廣泛使用。