Ich habe jetzt mal das hier gemacht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
LPDIRECT3DVERTEXBUFFER9 pVB; // Pointer auf einen Vertexbuffer
ZeroMemory(&pVB, sizeof(pVB)); // NULLen
D3DVERTEXBUFFER_DESC desc; // Beschreibung des VBs
CUSTOMVERTEX *v;
VOID *pVertex;
m_pMesh->GetVertexBuffer(&pVB); // VB zum Mesh ermitteln
pVB->GetDesc(&desc); // Eigenschaften ermitteln
int iNumVertices = m_pMesh->GetNumVertices(); // Anzahl der Vertices ermitteln
int iNumBytesPerVertex = m_pMesh->GetNumBytesPerVertex(); // Größe der Vertexstruktur ermitteln
v = new CUSTOMVERTEX[iNumVertices]; // Array für Vertices anlegen
for(int i=0; i<iNumVertices; i++)
{
pVB->Lock(i * iNumBytesPerVertex, iNumBytesPerVertex, (VOID**)&pVertex, D3DLOCK_READONLY);
memcpy(&v[i], pVertex, desc.Size);
pVB->Unlock();
}
|
Probleme:
1. v ist kein Array!?! Warum nicht? In v ist lediglich das erste Vertex gespeichert. Es müsste doch aber eingetlich ein Array für alle Vertices sein, oder?
2. Bei dem memcpy-Befehl musste ich dfas '&' hinzjfügen, damit es klappt. Weiß nicht warum (wenn ich den Index von v weglasse, geht es ohne '&' !).
3. Beim 52 Durchlauf (i=51) gibt es einen Zugriffsfehler bei memcpy.
4. iNumVertices ist immer größer als Milkshape3D ausgibt (mit dem Programm habe ich die Modelle erstellt).
5. Der Ansatz erscheint mir nicht optimal, da ich ja so für jedes Vertex des Buffer öffnen und schließen muss. Ich habe es aber nicht hinbekommen den Buffer erst einmal ganz zu kopieren und dann zu zerlegen.
Hoffe jemand kann mit sagen, wo die Probleme herrühren.