Hallo,
die Überschrift ist vielleicht nicht so toll gewählt, aber ich versuche mal das Problem zu beschreiben.
Ich arbeite gerade mit DirectX und lade darin ein Mesh aus einem File. Das Mesh als Attribute u.a. den VertexBuffer, der alle Punkte des Mesh enthält und ein Flag, daß mir sagt von welchem Format die Vetices im Buffer sind. Nur zur Erklärung, es gibt Vertexformate, welche nur die Position beinhalten, aber auch welche, die eine Texture, Normalen, etc. haben.
Jedenfalls muss ich an einer Stelle einmal die Punkte durchlaufen, um darauf eine Berechnung durchzuführen. Dafür muss man den Vertexbuffer vom Mesh auslesen. Das geht ungefährt so (in C Sarp):
Mein Problem ist nun, daß das geladene Mesh je nach Datei unterschiedliche Vertex-Formate aufweisen kann. An dieser Stelle muss ich aber genau angeben, in welchem Vertex-Format er den Buffer auslesen bzw. locken soll. Tue ich das nicht, stimmen die Daten auf Grund des falschen Cast nicht. Also statt PositionNormalTextured muss ich ihm irgendwie beibringen immer genau auf das Format zu casten, was gerade tatsächlich im Buffer ist. Nur leider weiß ich nicht wie.
Danke für jeden Tip.
Matthias
die Überschrift ist vielleicht nicht so toll gewählt, aber ich versuche mal das Problem zu beschreiben.
Ich arbeite gerade mit DirectX und lade darin ein Mesh aus einem File. Das Mesh als Attribute u.a. den VertexBuffer, der alle Punkte des Mesh enthält und ein Flag, daß mir sagt von welchem Format die Vetices im Buffer sind. Nur zur Erklärung, es gibt Vertexformate, welche nur die Position beinhalten, aber auch welche, die eine Texture, Normalen, etc. haben.
Jedenfalls muss ich an einer Stelle einmal die Punkte durchlaufen, um darauf eine Berechnung durchzuführen. Dafür muss man den Vertexbuffer vom Mesh auslesen. Das geht ungefährt so (in C Sarp):
Code:
D3D.VertexBuffer meshVB = this.m_mesh.VertexBuffer;
D3D.CustomVertex.PositionNormalTextured[] data = (D3D.CustomVertex.PositionNormalTextured[]) meshVB.Lock( 0, typeof(D3D.CustomVertex.PositionNormalTextured), D3D.LockFlags.None, this.m_mesh.NumberVertices);
// do something
meshVB.Unlock();
meshVB.Dispose();
Mein Problem ist nun, daß das geladene Mesh je nach Datei unterschiedliche Vertex-Formate aufweisen kann. An dieser Stelle muss ich aber genau angeben, in welchem Vertex-Format er den Buffer auslesen bzw. locken soll. Tue ich das nicht, stimmen die Daten auf Grund des falschen Cast nicht. Also statt PositionNormalTextured muss ich ihm irgendwie beibringen immer genau auf das Format zu casten, was gerade tatsächlich im Buffer ist. Nur leider weiß ich nicht wie.
Danke für jeden Tip.
Matthias
Zuletzt bearbeitet: