簡體   English   中英

如何從字節 stream 獲取 Vector3 數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM