[英]How to get a array of Vector3 from a byte stream?
我的問題相當簡單:將包含連續浮點數的字節流byte[] data
轉換為表示網格Vector3[] vertices
的頂點的向量數組。
到目前為止,這是我的方法(此處僅顯示相關代碼):
public void SetReconstructedMeshFromDataStream(byte[] data)
{
int vertexBufferSize = BitConverter.ToInt32(data, 0);
Mesh mesh = new Mesh();
// 12 is the size of Vector3:
mesh.vertices = new Vector3[vertexBufferSize / 12];
// srcOffset = 12, because that is the size of the header in the data buffer:
Buffer.BlockCopy(data, 12, mesh.vertices, 0, vertexBufferSize);
}
這失敗了,因為Buffer.BlockCopy()
只適用於基本類型。 當然我們可以只復制到一個float[]
,但是如何在沒有循環的情況下從float[]
轉換為Vector3[]
呢?
基本上我想避免遍歷我的網格的所有頂點(和法線、三角形……),因為我的字節流中已經有正確排序的數據。 我只是想創建具有正確大小的對象並復制(或引用)數據。
編輯:找到了類似問題的答案:這是幾年前的事了。 它仍然是我問題的最佳答案嗎? 使用不安全代碼有什么注意事項嗎?
曾經做過一些非常相似的事情,將向量從 C++ dll 轉移到向量數組。 我不記得確切的代碼,但它涉及 Unity Collections package。它提供了一系列本機數據類型,包括 NativeArray,它具有 Reinterpret 方法,可以直接將類型重新解釋為另一種類型。 就我而言,我已經有了一系列浮點數,但它也可以直接從字節開始工作。
也就是說,您是否可以控制生成字節 stream 的代碼? 因為如果您正在編寫自己的本機插件,則可以獲得網格頂點的句柄並直接操作 DLL 端的那些,這可能會再快一點。 Unity 的 github 中的官方原生渲染插件示例演示了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.