2017-05-28 17 views
0

SharpDX(C#DirectXラッパー)を使用してHoloLens UWPアプリケーションを開発していますが、デバイスで生成された空間マッピングデータを処理したいとします。空間サーフェスメッシュバッファから頂点とインデックスを読み取る

環境を説明するメッシュを含むSpatial​Surface​Meshのリストを取得できました.TriangleIndicesとVertexPositionsという2つのプロパティがあり、読んで興味があります。

問題は、それらが一緒にし、elementCount、ストライド(各要素の長さ) DirectXPixelFormatと、生データとIBufferを含むSpatial​Surface​Mesh​Bufferのインスタンスは、であり、そしてそのフォーマットしながら使用してメッシュをレンダリングするために最適であるということですDirectX私は頂点の座標とインデックスの順序を私のアプリで使う方法を知りません。

私は何とか指定されたストライドとフォーマットを使用してIBufferからデータを読み込む必要があると思いますが、どのように手がかりをつけるかについてのドキュメントは見つかりませんでしたか?

答えて

1

thisによると、リンクIBufferはバイト[]の周りのラッパーであり、ベクトルはその順番(x、y、z、w)で保存されます。形式(int16、floatなどが使用されている場合)は、Spatial​Surface​Mesh​BufferクラスのFormatプロパティを調べることで確認できます。このプロパティは、値が異なる順序で格納されている場合、または正しい位置を取得するために追加の変換が必要な場合も定義します。だから、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)); 
} 
ような何かを行うことができ

関連する問題