sooo... jetzt wo Ferien sind, hab ich auch endlich wieder Zeit, mich mit DirectX zu befassen.
An dem Problem mit den vielen Vertices komm ich nicht dran vorbei.
Wenn ich euch jetzt sage "hier ist meine Funktion, die funktioniert nicht, was mach ich falsch?" können wir noch seeehr lange drüber diskutieren. Ob ein Objekt gezeichnet wird oder nicht hängt nicht alleine von der Objekt-Laden-Funktion ab, sondern auch noch von vielen anderen Faktoren. (ist das d3d-device richtig initialisiert, lösche ich alle backbuffer etc.).
Deshalb mach ich das jetzt etwas anders.
Ich habe in mitten von einigem Code folgende Funktion stehen:
|
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
23
24
25
26
27
28
|
void letstestsomevectorclass(LPDIRECT3DDEVICE9 D3DDevice){
VERTEX testvertex [3];
#define MyFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
D3DDevice->CreateVertexBuffer(3*sizeof(VERTEX), 0, MyFVF, D3DPOOL_MANAGED, &VertexBuffer, NULL);
testvertex[0].x = 5;
testvertex[0].y = 5;
testvertex[0].z = 1;
testvertex[0].Color = RGB(100, 100, 100);
testvertex[1].x = 0;
testvertex[1].y = 0;
testvertex[1].z = 1;
testvertex[1].Color = RGB(100, 100, 100);
testvertex[2].x = 10;
testvertex[2].y = 0;
testvertex[2].z = 1;
testvertex[2].Color = RGB(100, 100, 100);
VertexBuffer->Lock(0,0,(void**)&MYVOID,0);
memcpy(MYVOID, testvertex, sizeof(testvertex));
VertexBuffer->Unlock();
}
|
Die Funktion zeichnet mir wie gewünscht und ohne Fehler oder Speicherlecks ein graues Dreieck.
Wer kann mir die Funktion so umschreiben, dass sie rein theoretisch auch 1.000.000 Dreiecke zeichnen könnte? Diese 3 Millionen Punkte finden eben leider keinen Platz in einem C-Array.
Ich weiß, dass ich rein theoretisch auch den zeichnenden Part
|
C-/C++-Quelltext
|
1
2
|
d3ddev->SetStreamSource(0, VertexBuffer, 0, sizeof(VERTEX));
d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
|
eine Millionen mal aufrufen könnte... aber das ist mir zu langsam, und keine dauerhafte Lösung.
Ich habe versucht die Funktion so klein wie möglich zu halten, so dass es jetzt nurnoch 28 Zeilen Code sind, die umgeschrieben werden müssen.
Sollte die Vertex-class inzwischen zu zuviel Verwirrung geführt haben, wäre ich natürlich auch an anderen Lösungswegen interessiert.
Beispielsweise der Lösungsweg von dot:
Für das Problem mit den Vertices verwend ich persönlich immer eine Hashtable (std::unordered_map).
Danke schonmal an alle, die versuchen sich meinem Problem auch nach 4 Seiten ergebnisloser Forumsdiskussion noch anzunehmen.