2017-05-28 77 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)); 
}