DirectX Customvertex
-
Hi,
mich würde mal interessieren woher DirectX eigentlich die Struktur eines Customvertex kennt. Also zB. in dem SDK:
struct CUSTOMVERTEX { D3DXVECTOR3 position; D3DXVECTOR3 normal; };
Und wo würde man dann die Textur Koordinaten hin basteln? Vor oder nach den "Normalen"?
-
Du sagst DirectX wie du deine Daten angeordnet hast.
Beispiel:#define MY_CUSTOM_VERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) m_D3dDevice->SetFVF( MY_CUSTOM_VERTEX );
Gibt da so einige Parameter:
D3DFVF_XYZ
D3DFVF_XYZRHW
D3DFVF_NORMAL
D3DFVF_DIFFUSE
D3DFVF_SPECULAR
D3DFVF_TEX1
D3DFVF_TEX2
-
Ja, schon klar
Aber woher weiß DirectX in welcher Reihenfolge die Daten stehen? Das geht aus dem FVF nicht hervor!
-
Doch, das FVF sagt was vorkommt und in welcher Reihenfolge es vorkommen muss ist genau definiert (wenn du z.B. Position und Texcoords hast muss Position by Definition vor Texcoord sein). Nichts desto trotz ist das FVF sowieso veraltet, ein Relikt aus der Zeit der FFP. Heute verwendet man VertexDeclarations.
-
dot schrieb:
Reihenfolge es vorkommen muss ist genau definiert
Das hab ich mir jetzt fast gedacht, nur wo? Ich finde da nichts
Nichts desto trotz ist das FVF sowieso veraltet, ein Relikt aus der Zeit der FFP. Heute verwendet man VertexDeclarations.
Gilt das auch schon für DirectX9?
Wenn ja, dann MSDN-Link plzHat sich erledigt, aber warum verwenden die dann in den SDK Beispielen immer noch FVFs?
-
ich hatte die position und die farbe mal vertauscht in den FVF und das ergebnis war mehr als verwunderlich und auch blöd rauszufinden... xD
-
Skym0sh0 schrieb:
ich hatte die position und die farbe mal vertauscht in den FVF und das ergebnis war mehr als verwunderlich und auch blöd rauszufinden... xD
Joa, ich habe die wahrscheinlichste Anordnung durch rumprobieren jetzt auch schon raus, trotzdem würde mich interessieren wo die definiert ist..
-
nein, es kommt drauf an wie du das definierst...
wenn du folgendes schreibst:
#define CUSTOM_FVF (D3DFVF_XYZRHW | D3DFVF_NORMAL | D3DFVF_TEX1)
dann musst du deinen vertex auch so ind er reihenfolge definieren:
struct CustomVertex { vector3d pos; float rhw; vector3d normal; vector2d textur; };
wenn du pos und den rhw wert nun tauscht crasht das ganze...
-
Skym0sh0 schrieb:
nein, es kommt drauf an wie du das definierst...
wenn du folgendes schreibst:
#define CUSTOM_FVF (D3DFVF_XYZRHW | D3DFVF_NORMAL | D3DFVF_TEX1)
dann musst du deinen vertex auch so ind er reihenfolge definieren:
struct CustomVertex { vector3d pos; float rhw; vector3d normal; vector2d textur; };
wenn du pos und den rhw wert nun tauscht crasht das ganze...
Also sorry, aber das ist ja mal völliger Quatsch. Hast du dich nie gefragt was diese magischen Striche da machen?
-
Kurzzusammenfassung:
Die Reihenfolge ist fest vorgegeben.
Skym0sh0s Posting ist Quatsch.
Vergiss die FVF am besten und benutz Vertex Declarations.
-
this->that schrieb:
Kurzzusammenfassung:
Die Reihenfolge ist fest vorgegeben.
Skym0sh0s Posting ist Quatsch.
Vergiss die FVF am besten und benutz Vertex Declarations.cooky451 schrieb:
Hat sich erledigt, aber warum verwenden die dann in den SDK Beispielen immer noch FVFs?
Nicht, dass ich nicht glauben würde dass Vertex Declarations "besser" sind, aber die Frage stellt sich schon irgendwie..
-
cooky451 schrieb:
cooky451 schrieb:
Hat sich erledigt, aber warum verwenden die dann in den SDK Beispielen immer noch FVFs?
Nicht, dass ich nicht glauben würde dass Vertex Declarations "besser" sind, aber die Frage stellt sich schon irgendwie..
Von welchen Beispielen reden wir? Die FFP Tutorials und irgendwelche uralten Beispiele vielleicht. Aber neuen Beispielen sollten wohl VertexDeclarations verwenden...
-
Im Installationsordner: \Samples\C++\Direct3D\Tutorials\Tut03_Matrices
Da zB.
-
Öh ja, das is ein uraltes Anfängertutorial das auf der FFP aufsetzt, was erwartest du da!?
-
dot schrieb:
Öh ja, das is ein uraltes Anfängertutorial das auf der FFP aufsetzt, was erwartest du da!?
Hm, zB. dass die Jungs von Microsoft ihr SDK mehr oder weniger aktuell halten? Oder ist das irgendeine alte SDK Version?
-
cooky451 schrieb:
Hm, zB. dass die Jungs von Microsoft ihr SDK mehr oder weniger aktuell halten? Oder ist das irgendeine alte SDK Version?
Aktuell wäre dann D3D11...
-
dot schrieb:
cooky451 schrieb:
Hm, zB. dass die Jungs von Microsoft ihr SDK mehr oder weniger aktuell halten? Oder ist das irgendeine alte SDK Version?
Aktuell wäre dann D3D11...
touché^^
-
dot schrieb:
Aktuell wäre dann D3D11...
Und deswegen lassen sie DX9 vergammeln?
Scorcher24 schrieb:
touché^^
Ich bin noch nicht am Ende!
-
cooky451 schrieb:
dot schrieb:
Aktuell wäre dann D3D11...
Und deswegen lassen sie DX9 vergammeln?
Ich denk du verstehst nicht richtig. D3D9 wurde in eine Zeit hineingeboren wo noch nicht jede Grafikkarte Shader hatte und unterstützt daher sowohl eine Fixed-Function- als auch eine frei programmierbare Pipeline. Bei dem fraglichen SDK Sample handelt es sich eben um ein Tutorial für die FFP und das wird natürlich FVF einsetzen da das nunmal ist wie die Dinge in der FFP funktionieren. Wir schreiben aber das Jahr 2011 und die FFP war schon als D3D9 rauskam eigentlich nurmehr aus Gründen der Kompatibilität zu älterer Hardware da. Aber auch wenn die FFP schon seit langem keine Rolle mehr spielt: D3D9 hat eben noch eine FFP und es gibt eben auch noch Samples dafür, eben weil sie da ist. Von "vergammeln lassen" kann da imo nicht die Rede sein. Aber abgesehen davon, auch wenn es uns so lange wie keine andere Version je zuvor stets treue Dienste geleistet hat: D3D9 ist steinalt. D3D9 wird nächstes Jahr 10. Ich denke du weißt was das in dieser Branche bedeutet. Der einzige Grund warum man überhaupt noch Spuren von D3D9 im SDK findet ist weil es immer noch weit verbreitet ist. Erwartest du ernsthaft dass Microsoft noch Ressourcen auf das SDK zu einer 10 Jahre alten Technologie die heute niemanden mehr interessiert verwendet!? Ich weiß, der Tod von Windows XP war für viele ein Schock, aber das Leben geht weiter...
-
Scorcher24 schrieb:
touché^^
..