DirectX 9: Vertexformat bekanntmachen
-
Hi zusammen.
Ich bin Newbe und will grad mal versuchen ein Dreieck auf den Bildschirm zu bringen. Sollte jemand dafür ein sehr gutes Tutorial kennen, dann bin ich über solche Hinweise auch immer dankbar!
Aber jetzt zu meinem Problem:Ich habe folgenden Code
bool xD3D_Dreieck_mit_Textur_rendern(void) { // Selbstdefiniertes Vertexformat bekannt machen g_lpD3DDevice->SetVertexShader(D3DFVF_VERTEX); // Textur für das Device festlegen g_lpD3DDevice->SetTexture(0, g_lpTextur); // Szene starten g_lpD3DDevice->BeginScene(); // Vertices rendern g_lpD3DDevice->DrawPrimitiveUP( D3DPT_TRIANGLELIST, // Echte Dreiecke 1, // 1 Dreieck zum Rendern &g_avTri[0], // Anfang der Daten sizeof(D3DVERTEX)); // Grösse eines Vertex g_lpD3DDevice->EndScene(); return TRUE; } // xD3D_Dreieck_mit_Textur_rendernund er meckert immer, dass
error C2664: 'SetVertexShader' : Konvertierung des Parameters 1 von 'const int' in 'struct IDirect3DVertexShader9 *' nicht moeglich Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatIst das in DirectX 9 vielleicht anders, mit der Darstellung???
Danke schonmal im Voraus!
Schuri
-
Hi,
was hast du denn, die 9ér Original SDK Docu hat doch ein Tutorial, um ein Dreieck auf den Bildschirm zu bringen.
Allerdings über Custom-Vertices, nicht über den FVF Ansatz.
-
Zur Lösung des Problems:
In der 9er muss man wohl das Format jetzt über
g_pd3dDevice->SetFVF(D3DFVF_VERTEX);bekanntgeben. Hatte eben das gleiche Problem, weil ich ein Tutorial über DX8.1 gelesen habe und selbst mit der 9er arbeite hier.
-
muhzilla schrieb:
Zur Lösung des Problems:
In der 9er muss man wohl das Format jetzt über
g_pd3dDevice->SetFVF(D3DFVF_VERTEX);bekanntgeben. Hatte eben das gleiche Problem, weil ich ein Tutorial über DX8.1 gelesen habe und selbst mit der 9er arbeite hier.
Das war schon immer der Fall wenn du die Fixed-Function-Pipeline verwendest

Wenn du die Custom-Pipeline verwendest gehts auch schon immer über SetVertexShader(), aber dann benötigst du natürlich auch einen VertexShader - den du nicht hast.
MfG SideWinder
-
Oh, okay, ich bin noch sehr neu in der Materie.
Wo wir schon gerade dabei sind, ich scheine hier ein Problem zu haben, was wahrscheinlich unmittelbar damit in Zusammenhang steht.Im zweiten Tutorial über Direct3D der MSDN (das erste Dreieck wird gerendert) wird D3DFVF_XYZRHW verwendet. Abgesehen davon, dass ich nach wie vor mit RHW nichts anfangen kann, stört es mich viel mehr, dass ich im Falle von D3DFVF_XYZ nur einen schwarzen Bildschirm sehe. Dementsprechend komme ich bei Tutorial 3 dann auch nicht weiter (hier soll das Dreieck durch Rotation animiert werden), den da wird auf einmal dieses Format verwendet und mein Dreieck verschwindet im Grafiknirvana.
Wenn ich das Beispiel aus der MSDN kompiliere läuft das natürlich einwandfrei...
Was muss man also beachten, wenn man statt D3DFVF_XYZRHW jetzt D3DFVF_XYZ verwendet? Meine CUSTOMVERTEX struct ist natürlich angepasst worden. Anscheinend übersehe ich noch irgendwas anderes.
-
muhzilla schrieb:
Was muss man also beachten, wenn man statt D3DFVF_XYZRHW jetzt D3DFVF_XYZ verwendet? Meine CUSTOMVERTEX struct ist natürlich angepasst worden. Anscheinend übersehe ich noch irgendwas anderes.
Die Punkte sollten im Sichtbereich der Kamera liegen.
Bye, TGGC
-
Weil du nach einem Tutorial gefragt hast: http://pluralsight.com/wiki/default.aspx/Craig.DirectX/Direct3DTutorialIndex.html
-
@muhzilla: Der Tip von TGGC beinhaltet vor allem auch, dass du bereits mit dev->SetTransform() eine Kamera-Matrix gesetzt hast.
RHW bedeutet für dich: Die Vertex-Daten sind schon auf Screenspace konvertiert. X-Punkt 200 bedeutet also tatsächlich 200 Pixel vom linken Rand.
Ohne RHW sind die XYZ-Werte des Vertex im Localspace, heißt relativ zum zugehörigen Mesh am besten nur von -1 bis 1. Die werden dann mit Hilfe der drei Matrizzen in der Fixed-Function-Pipeline in Screenspace umgerechnet.
@Optimizer: Das Tutorial ist ja mal schrott für ihn als C++-Programmierer

MfG SideWinder
-
Hehe, das erklärt auch, warum das Dreieck im Tutorial mit D3DFVF_XYZRHW mit 200.0f pixeln und mehr genauso gross aussieht wie das Dreieck im Tutorial mit D3DFVF_XYZ und 1.0f
