Hallo,
mein Problem ist, dass ich einen Vertexbuffer in c++ mit DirectX9 erstellen möchte, aber weder die Größe noch die einzelnen Positionen der Punkte vorher weiß. Am besten schreibe ich aber mal das konkrete Problem, ich glaube sonst kann man das nicht verstehen:
Also, ich möchte ein Terrain aus einer Datei laden und dieses dann in den Vertexbuffer packen, da die fps sonst im Keller sind. Das Problem ist jetzt, das ich halt weder Weiß, wie die einzelnen Punkte des Terrains liegen, noch wie groß das ganze überhaupt ist. Dazu lade ich erstmal die Daten aus der Datei und dass funktioniert auch ganz gut, denn wenn ich das Ganze per DrawPrimitiveUP zeichne gibt es kein Problem.
Das habe ich bis jetzt gemacht, aber leider funktioniert es ja noch nicht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//Initialisierung
LPDIRECT3DVERTEXBUFFER9 v_buffer=NULL;
d3ddev->CreateVertexBuffer(uiTriangleCount*3*sizeof(STerrainVektor), D3DUSAGE_WRITEONLY, STerrainVektor::dwFVF, D3DPOOL_MANAGED, &v_buffer, NULL);
void *vb_vertices;
v_buffer->Lock(0,0,&vb_vertices,0);
memcpy(vb_vertices, (void*)pVertices, uiTriangleCount*3*sizeof(STerrainVektor));
//Rendern
d3ddev->SetFVF(STerrainVektor::dwFVF);
d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(STerrainVektor));
d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
|
uiTriangleCount enthält die Anzahl der Dreiecke.
pVertices sind die gespeicherten Punkte
d3ddev ist mein 3d-Device
Zum Vergleich noch wie ich es mit DrawPrimitiveUP mache:
|
C-/C++-Quelltext
|
1
2
3
|
//Rendern
d3ddev->SetFVF(STerrainVektor::dwFVF);
d3ddev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, uiTriangleCount, (void*)pVertices, sizeof(STerrainVektor));
|
Der Rest ist bei beiden Methoden identisch geblieben, also glaube ich nicht das da der Fehler liegt.
Das Beispiel mit Vertexbuffer gibt übrigens keinen Fehler, sondern zeigt einfach nichts an (man sieht den Hintergrund)
Habe ich irgendetwas vergessen, was man beim Umwandeln von DrawPrimitiveUP zu Vertexbuffer machen muss?
Muss ich vielleicht an der Vertexliste was ändern?
Ich hoffe mein Problem ist einigermaßen verständlich.
Danke schonmal im Voraus