DirectX - Texture Mapping
-
Hallo Leute!
Ich beschäftige mich seit ein paar Wochen mit DirectX11 - hab mir ein meiner Meinung nach gutes Buch dazu gekauft (http://www.amazon.de/Beginning-DirectX-11-Game-Programming/dp/1435458958/ref=sr_1_1?ie=UTF8&qid=1339441392&sr=8-1)
Ich bin gerade bei TextureMapping gelandet und hab mal mit dem mitgelieferten Quellcode ein bisschen "experimentiert" - jedoch funktioniert dieser dann nicht mehr:
Originalcode:
VertexPos vertices[] = { { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 0.0f ) }, { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) }, { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) }, { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) }, };
Mein veränderter Code:
VertexPos vertices[] = { {XMFLOAT3(-1.0f,1.0f,1.0f), XMFLOAT2(0.0f,0.0f)}, {XMFLOAT3(1.0f,-1.0f,1.0f), XMFLOAT2(1.0f,1.0f)}, {XMFLOAT3(1.0f,1.0f,1.0f), XMFLOAT2(1.0f,0.0f)}, {XMFLOAT3(-1.0f,1.0f,1.0f), XMFLOAT2(0.0f,0.0f)}, {XMFLOAT3(-1.0f,-1.0f,1.0f), XMFLOAT2(0.0f,1.0f)}, {XMFLOAT3(1.0f,-1.0f,1.0f), XMFLOAT2(1.0f,1.0f)}, };
Der Auszug zeigt die Definition der vertices mit den texture-Koordinaten.
Beim Orignalcode funktioniert die Darstellung der Textur, jedoch bei meinem Code nicht, kann mir wer sagen warum?
Ich habe ja lediglich die Eckpunkte der gerenderten Dreiecke getauscht bzw die Texture-Koordinaten .....
Ich hoffe es kann mir jemand meinen Fehler erklären bzw mir das Grundprinzip erklären falls ich etwas falsch verstanden habe.
Gleich mal danke an alle die mir helfen
lg breckal
-
Ich vermute mal dass deine Dreiecke einfach weggeculled werden, weil die Vertices im Gegenuhrzeigersinn angegeben sind
-
Danke für die Info - hab die Vertices im Uhrzeigersinn angegeben und nun funktioniert es ....
Gibt es auch einen Grund warum die Dreiecke weggeculled werden wenn man sie gegen den Uhrzeigersinn angibt?
-
Du kannst das Culling auch aus- oder umschalten. Der Sinn von Culling ist, dass, wenn du z.B. einen geschlossenen Körper hast, Dreiecke die von der Kamera wegschauen nicht gezeichnet werden. (Wenn alle Dreiecke so definiert sind, dass ihre Vertices "von vorne betrachtet" im Urzeigersinn laufen, dann erscheinen sie "von hinten" im Gegenuhrzeigersinn.)
-
ich dachte immer das mit dem culling funktioniert so, dass ich mir den normalvektor der fläche berechne und dann prüfe ob dieser zur kamera zeigt oder nicht ..... also dass ich das manuell machen muss
aber dass das d3d automatisch macht - das wusst ich natürlich nicht!
danke nochmal für die schnelle hilfe
-
breckal schrieb:
ich dachte immer das mit dem culling funktioniert so, dass ich mir den normalvektor der fläche berechne und dann prüfe ob dieser zur kamera zeigt oder nicht ..... also dass ich das manuell machen muss
Das ist eine Möglichkeit, wie man das implementieren kann. Musst du aber nich selber machen, das hat die Grafikkarte schon eingebaut (das auf der CPU selber zu machen, wäre viel zu ineffizient) und die macht das vermutlich ein bisschen anders.