【问题标题】:Reading vertexes and indices from a Spatial​Surface​Mesh​Buffer从空间​表面​网格​缓冲区​读取​顶点​和​索引
【发布时间】:2017-05-28 13:23:18
【问题描述】:

我正在使用 SharpDX(C# DirectX 包装器)开发 HoloLens UWP 应用,并且我想处理设备生成的空间映射数据。

我设法获得了Spatial​Surface​Mesh 的列表,其中包含描述环境的网格,它们有两个属性——TriangleIndices 和 VertexPositions——我有兴趣阅读。

问题在于它们是 Spatial​Surface​Mesh​Buffer 的实例,其中包含一个带有原始数据的 IBuffer,以及 ElementCount、Stride(每个元素的长度)和 DirectXPixelFormat,虽然该格式最适合使用 DirectX 渲染网格,但我不知道如何读取顶点坐标和索引顺序以在我的应用程序中使用它们。

我想我必须以某种方式使用指定的 Stride 和 Format 从 IBuffer 读取数据,但我找不到任何关于如何做到这一点的文档,有什么线索吗?

【问题讨论】:

    标签: c# uwp directx sharpdx hololens


    【解决方案1】:

    根据this 链接,IBuffer 只是 byte[] 的包装器,并且向量(大部分时间)以 x、y、z、w 的顺序保存。可以通过查看 Spatial​Surface​Mesh​Buffer 类的 Format 属性来找到格式(如果使用 int16、float 或其他格式)。此属性还定义了值是否以不同的顺序存储,或者是否需要额外的转换才能获得正确的位置。

    所以基本上你可以做类似的事情

    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));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多