2017-05-28 54 views
0

我正在開發使用SharpDX(C#DirectX包裝器)的HoloLens UWP應用程序,並且我想處理由設備生成的空間映射數據。從空間曲面網格緩衝區讀取頂點和索引

我已經設法得到一個包含描述環境的網格的Spatial​Surface​Mesh列表,它們有兩個屬性 - 三角形指標和頂點位置 - 我有興趣閱讀。

的問題是,它們是Spatial​Surface​Mesh​Buffer實例,其含有一個IBuffer與原始數據,沿着與elementCount中,步(每個元素的長度)的 DirectXPixelFormat,雖然該格式是最佳的使用呈現網格DirectX我不知道如何讀取頂點的座標以及在我的應用程序中使用它們的索引順序。

我想我必須以某種方式使用指定的步幅和格式從IBuffer中讀取數據,但是我一直無法找到任何有關如何做到這一點的文檔,任何線索?

回答

1

根據this鏈接IBuffer僅僅是byte []的包裝,並且矢量(大部分時間)以x,y,z,w的順序保存。可以通過查看Spatial​Surface​Mesh​Buffer類的Format屬性找到格式(如果int16,float或其他使用的)。該屬性還定義了值是否以不同的順序存儲,或者是否需要額外的轉換才能獲得正確的位置。

所以basicly你可以做類似

using System.Runtime.InteropServices.WindowsRuntime; 

Spatial​Surface​Mesh​Buffer surfaceMeshBuffer = ... 
byte[] data = surfaceMeshBuffer.ToArray(); 
var vectors = new List<Vector4>();  

for(int i = 0; i < data.length;) { 
    float x = System.BitConverter.ToSingle(data, i); 
    i += sizeof(float)/8; 
    float y = System.BitConverter.ToSingle(data, i);   
    i += sizeof(float)/8; 
    float z = System.BitConverter.ToSingle(data, i);   
    i += sizeof(float)/8; 
    float w = System.BitConverter.ToSingle(data, i);   
    i += sizeof(float)/8; 

    vectors.Add(new Vector4(x, y, z, w)); 
} 
相關問題