Hilfe bei DX10 Einstieg
-
Hallo zusammen,
ich stehe da gerade auf dem Schlauch.
Bei DX9 setze ich mit SetTransform meine Kameraansicht und Richtung.
Bei Pixelshadern und Vertexshadern in DX10 übergibt man dies mit einer 4x4 Matrix.
Ich denke das hätte auch schon in DX9 funktioniert, steht aber in keinem Buch das ich habe, dort wird immer SetTransform verwendet.
Allerdings sehe ich keinen Befehl, der sich an Shader wendet, sondern nur
Beispiele die einen "Effekt" die Ansicht Matrix übergeben können.
Wird ein Shader immer als Effekt gleichgesetzt?Was ich nicht verstehe, warum die Welt ein Effekt ist und kein Shader.
Kann mir das jemand erklären?Grüße
TheNoName
-
In d3d9 ist noch eine Fixed Function Pipeline implementiert die es einem erlaubt ohne selber direkt Shader zu schreiben auszukommen. SetTransform() ist Teil eben dieser. Wenn man Shader direkt verwendet würde man dort eine Worldmatrix mit SetVertexShaderConstantF() setzen. Effekte verwalten komplette Setups von Renderstates inklusive der verwendeten Shader. Das Effekt Framework spart einem in der Hinsicht einiges an Verwaltungsaufwand weswegen das gerne verwendet wird.
-
Wow, danke für diese genaue Erklärung.
Bist du dir bei DX9 und der fixen Renderpipeline sicher?
Kann es sein, das mit DX9C und DX9EX vielleicht doch noch eine freie Pipeline implementiert wurde? (Vista Kompatibilität)Ich sehe zur Zeit in DX9 und 10 noch die DXGI Library bei vielen verwendet. Was hat es damit auf sich, bzw. wie verbreitet ist sie?
Ich dachte, da sie 9 und 10 kompatibel ist, wird sie auch freie Pipelines haben.Grüße
TheNoName
-
thenoname schrieb:
Bist du dir bei DX9 und der fixen Renderpipeline sicher?
Kann es sein, das mit DX9C und DX9EX vielleicht doch noch eine freie Pipeline implementiert wurde? (Vista Kompatibilität)^^ ja da bin ich mir 110%ig sicher xD
D3D9 hat (wie D3D8 zuvor) beides, sowohl eine Fixed Function Pipeline als auch Shader
D3D10 hat keine Fixed Function Pipeline mehr.thenoname schrieb:
Ich sehe zur Zeit in DX9 und 10 noch die DXGI Library bei vielen verwendet. Was hat es damit auf sich, bzw. wie verbreitet ist sie?
Ich dachte, da sie 9 und 10 kompatibel ist, wird sie auch freie Pipelines haben.DXGI ist die DirectX Graphics Infrastructure, eine neue Library die mit Vista und D3D10 eingeführt wurde und Dinge wie z.B. das verwalten von Adaptern, Outputs, Monitoren, SwapChains etc. aus D3D auslagert.
-
Und da ist es wieder, mein Verständnissproblem:
D3D9 hat (wie D3D8 zuvor) beides, sowohl eine Fixed Function Pipeline als auch Shader
Wenn ich das richtig verstehe, ist eine fixed Pipeline ohne Shader, eine freie Pipeline mit Shadern?
Die Bücher behandeln meist Arbeiten mit SetTransform etc. sind damit also mit einer fixed Pipeline unterwegs.
Da DX9 Shader unterstützt kann die Worldmatrix statt it SetTransform auch über die Shader übergeben werden.
Warum übergibt jedes Buch allerdings nur einem ID3D "Effekt" die Worldmatrix in der DrawScene Funktion?
Kann ich Shader==Effekt sagen?
Kann ein einzelner Effekt die Kameraführung übernehmen?
-
thenoname schrieb:
Wenn ich das richtig verstehe, ist eine fixed Pipeline ohne Shader, eine freie Pipeline mit Shadern?
Ja
thenoname schrieb:
Da DX9 Shader unterstützt kann die Worldmatrix statt it SetTransform auch über die Shader übergeben werden.
Naja, Shader sind mehr als nur ein alternativer Weg die Worldmatrix zu übergeben. Wenn du Shader verwendest kannst (musst) du die Transformationen usw. das alle selber programmieren. Ob du dann auch so etwas wie eine Worldmatrix hast oder was komplett anderes machst ist eigentlich dir überlassen...
thenoname schrieb:
Warum übergibt jedes Buch allerdings nur einem ID3D "Effekt" die Worldmatrix in der DrawScene Funktion?
Die Bücher die du kennst. Wie gesagt bringt einem das Effekt Framework zusätzliche Flexibilität, spart einem einiges an Arbeit und wird daher gern verwendet. Das heißt nicht dass man es immer verwendet. Das Effekt Framework setzt selber nur auf D3D9 auf, du kannst alles was Effekte tun mit d3d natürlich auch direkt selber machen.
thenoname schrieb:
Kann ich Shader==Effekt sagen?
Nein, siehe mein erstes posting in diesem thread.
thenoname schrieb:
Kann ein einzelner Effekt die Kameraführung übernehmen
Nein. Ok, sagen wir nicht dass es theoretisch vollkommen unmöglich ist, es wäre aber praktisch total sinnfrei und ineffizient das zu machen.
-
Danke für die Einsicht.
Ein weiteres Problem das ich habe ist Google
Ich suche nach einem guten Tut, in dem die freie Pipeline zur Sprache kommt.
Leider finde ich nur solche Tuts:
http://www.d3dcoder.net/d3d10.aspx
Dort ist zwar der Code dabei, aber nie wirklich vollständig um ihn zu kompilieren.
Meist fehlen die Shader Dateien oder irgendwelche eigenen, für dieses Tut geschriebenen Utility Bibliotheken die stark der DXGI ähneln. Jeder hat halt sein Steckenpferd.
Ich suche mehr was natives, also ohne eigenen Bibliotheken, DXGI etc.
Das Beispiel sollte so wie in obigen Tut das Cube Beispiel sein.
Also ein DX10 Cube Tut, das nicht unbedingt auf einer Game Engine oder zusätzlichen Bibliotheken aufsetzt. Dann könnte ich mal ein wenig rumprobieren.
-
Ich kann da nur die Samples im DX SDK empfehlen. Ich kenne kein anderes SDK das so gut dokumentiert ist wie das DirectX SDK...
-
thenoname schrieb:
Dort ist zwar der Code dabei, aber nie wirklich vollständig um ihn zu kompilieren.
Meist fehlen die Shader Dateien oder irgendwelche eigenen, für dieses Tut geschriebenen Utility Bibliotheken die stark der DXGI ähneln. Jeder hat halt sein Steckenpferd.Also Compilieren kannst du den Code meines Wissens nach immer (ich habe das Buch, welches zu diesen Quellcodes gehört).
Jo DXGI Dinge werden gebraucht (IDXGISwapChain ... ). Ich finde, dass es ein sehr gutes Buch ist und der Quellcode ist ja nicht als TUT gedachtSonst kann auch ich die DirectX Documentation empfehlen.