Guten Morgen,
Ich entwickel gerade an einem DirectX-Projekt und bin dabei auf ein Problem gestoßen, für das mir keine Lösung einfällt und ich auch bei diversen Suchmaschinen nichts gefunden habe. Vermutlich habe ich nach den falschen Begriffen gesucht, da meine Fragestellung sicher schon Hunderte / Tausende vor mir hatten.
Ich habe ein Mesh aus einer *.x-Datei geladen und render es grob mit folgenden Aufrufen (Render-Funktion in meiner Mesh-Klasse):
|
C-/C++-Quelltext
|
1
2
3
4
5
|
for(DWORD i=0; i<this->dwNumMaterials; i++)
{Device->SetMaterial(&this->lpMeshMaterials[i]);
Device->SetTexture(0, this->lpMeshTextures[i]);
this->lpMesh->DrawSubset(i);
}
|
Nun möchte ich dieses Mesh sehr oft darstellen, nur an verschiedenen Positionen. Dazu habe ich mir eine zweite Klasse geschrieben, die einen Szene-Graphen implementiert und an jedem Knoten des Graphen eine Referenz auf ein Mesh hat. Wenn ich in meiner Haupt-Render-Funktion den Szene-Graphen rendern möchte, wird für jede Mesh-Referenz die jeweilige Render-Funktion aufgerufen.
Das funktioniert auch wunderbar, ist aber grausam langsam. Meine Frage ist nun, wie das schneller geht? Angenommen ich habe ein Baum als X-Modell geladen und möchte nun 10.000 Bäume rendern, dann müsste ich doch die ganzen Render-Informationen nur ein Mal auf die Grafikkarte packen und 10.000 mal transformieren, oder? In OpenGL gibt es dafür die Display-Lists, aber wie geht das in DirectX?