Direct3D rendert Triangle nicht wirklich
-
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
ich glaube du musst da mal reinschauen
-
Mal rein prinzipiell:
Bob Wolfskin schrieb:
Wie genau erzeugt man so ein dynamisches Array ,was man immer erweitern kann?
Wenn du dich noch mit solchen Fragen rumschlagen musst, dann ist Direct3D eindeutig noch lange nichts mit dem du dich befassen solltest. Lern besser erstmal deine Programmiersprache zu beherrschen.
-
....Ich meinte eigendlich was anderes.Ich weiß wie man ein dynamisches Arry erstellt ,aber nicht wie man es erweitern.
Wenn ich z.B sowas habe:
int NumBuffers = 0; ID3D11Buffer* Buffers = new ID3D11Buffer; void Add(ID3D11Buffer* buffer) { strcpy(buffer,Buffers); //kann man das so machen ? NumBuffers++; }
Ich würde dann immer einen neuen Vertexbuffer hinzufügen und durch den Integer NumBuffers beim rendern dan in der forschleife durchgehen und mit sizeof(ID3D11Buffer) die einzelnen buffer wieder rausfischen.
-
Sry das ich nochmal schreibe.Mir ist gerade aufgefallen ,dass ich den falschen Befehl meinte.Ich meine statt dem strcpy memcpy,da strcpy nur char's kopiert.
-
Bau doch deine Vertices zuerst im Speicher auf und pack sie dann alle auf einmal in einen Buffer. Dann weißt du auch wie groß der sein muss...
-
Das Problem bei sowas ist,dass ich für verschiedene Bereiche eines Models ja auch verschiedene Shader mit den entsprechenden Texturen habe,und wenn alles in einem Buffer ist ,kann ich das nichtm hr trennen.
Ich frag mich man das macht mit so einer "Render List" ,oder wie man geladene Objekte alle rendern kann.
-
Ich versteh dein Problem leider nicht. Zuerst ist es einer der beiden Lösungswege die du nennst, irgendwie alles in einem Buffer zu haben und nun ist genau das auf einmal ein Problem!? Was meinst du mit "nicht trennen können"!?
-
Ich hab das in dem Buch Spieleprogrammierung mit DirectX9 und C++ gesehen.
Da hat er alles in den Globaln Vertexbuffer gesteckt und in der Modelklasse den Start und End Vertex gespeichert.Jetzt nimmt man bei rendern folgendes;
Model 1 geladen,belegt Vertex 0 - 200 im globalen Vertexbuffer
Model 2 geladen,belegt Vertex 201 - 400 im globalen VertexbufferBeim rendern werden die ersten 200 Vertices vom ersten Model genommen,die entsprechenden Texturen ,Shader gesetzt ,gerendert und dan die nächsten 200 vom zweiten Model.
Aber in DirectX 11 kann man bei rendern keinen Start und End Vertex angeben,sodass es garnicht gehen wird,die Modele von einnandern zu trennen.
-
Bob Wolfskin schrieb:
Aber in DirectX 11 kann man bei rendern keinen Start und End Vertex angeben,sodass es garnicht gehen wird,die Modele von einnandern zu trennen.
Was genau verleitet dich zu der Annahme, dass man das nicht kann? Schau dir doch mal bitte an was die zwei Parameter von ID3D11DeviceContext::Draw() genau sind...
-
Ohhhhhh das hab ich übersehen
Muss dan später mal nachgucken wie der das im buch gemacht hat..
Danke