Projektion und Kamera (OpenGL 3.3)
-
Hallo ich habe mal eine Frage....
Ich möchte in einem Programm ein Dreieck malen, das man drehen, verschieben und vergrössern bzw. verkleinern kann.
Soweit bin ich schon.
Dann möchte ich noch, dass man das Dreieck mit einer Kamera von verschiedenen Seiten ansehen kann und dass es eine Projektionsmatrix gibt.
Mein Problem ist, dass immer wenn ich die Projektionsmatrix dazurechne nichts mehr angezeigt wird. (Bei der Kamera tut sich nichts, aber das soll ersteinmal zurückgestellt werden)
Ich möchte aber auch verstehen, was da passiert, also möchte ich die Matrizen "per Hand" und nicht per glm-Funktion (oder Ähnlichem) erstellen.Meine Frage ist jetzt:
Wie sieht eine Projektions [Kamera] Matrix aus und in welcher Reinfolge multipliziert man Vertex, Skalation, Translation, Rotation (x,y,z), Kamera und Projektion?
-
Hier steht alles: http://blog.vertexwahn.de/Wordpress/?p=60
-
Hier noch: http://vertexwahn.de/PerspektivischeProjektion.pdf
oh noch was gefunden: http://www.vertexwahn.de/gluPerspective.pdf
Fragen wie deine sind hier schon 100 mal aufgetaucht. Auch von mir vor langer Zeit.
-
Ah ok.
Danke für deine Antwort
Ich bin nämlich grad so ind der phase in der man jettz das erste Dreieck gemalt und verschoben hat und sich nun fragt wies weitergeht
-
Ich hab da noch ne Frage...
Wie bewegt man verschiedene Objekte unabhängig voneinander?
-
Man verwendet einfach unterschiedliche Transformationsmatrizen für jedes unabhängige Objekt.
-
Und wie sagt man dem Shader welche Matrix er bei welchem Vertex nehmen soll?
-
Skybuildhero schrieb:
Und wie sagt man dem Shader welche Matrix er bei welchem Vertex nehmen soll?
Du bist es doch, der den Shader programmiert!?
-
Ja aber ich hab nich verstanden wie man dem Shader zusätzlich zu dem Vertex auch noch die Matrix, die zu diesem Vertex gehört, übergibt. Ich meine man kann ja jetzt nich einfach 5 Matrizen übergeben und sagen: "Such dir die richtige raus".
Das möchte ich halt wissen. Wie man ihm sagt welche Matrix er nutzen soll.
-
Warum sollte jeder Vertex eine andere Matrix benötigen?
-
Und zudem hab ich jetzt die Projektionsmatrix wie in der PDF angegeben erstellt:
proj = mat4( cot(fovy/2)/aspect, 0 , 0 , 0 , 0 ,cot(fovy/2), 0 , 0 , 0 , 0 , -((f+n) / (f-n)), -((2*f*n) / (n-f)), 0 , 0 , -1 , 0 );
Wenn ich dass jetzt zu meiner Matrix dazumultipliziere, ist der Bildschirm schwarz. Muss man da evtl. irgentwelche Einstellungen ändern, die sonst verhindern, dass man ein Objekt auf der Z-Achse verschiebt oder eine Projektion einbaut (muss man vllt. die Standartprojektion außer Kraft setzen oder so?)
Position = Projektion * Skalation * RotationX * RotationY * RotationZ * Translation * Vertex;
-
Achso und ich meine ja wie macht man dem Shader deutlich, dass der Vertex, den er da bearbeitet, zu "Würfel A" gehört? Weil "Würfel A" eine andere Matrix hat als "Würfel B". Also wie sagt man dem Shader das der Vertex zu "Würfel A" gehört und somit mit "MatrixVonWürfelA" multipliziert werden muss, und nicht mit "MatrixVonWürfelB". Wie übergibt man noch den Parameter (z.B. int Zugehörigkeit = 1 (1 für A)) an den Shader? Das hab ich noch nicht verstanden.
-
Skybuildhero schrieb:
Achso und ich meine ja wie macht man dem Shader deutlich, dass der Vertex, den er da bearbeitet, zu "Würfel A" gehört? Weil "Würfel A" eine andere Matrix hat als "Würfel B". Also wie sagt man dem Shader das der Vertex zu "Würfel A" gehört und somit mit "MatrixVonWürfelA" multipliziert werden muss, und nicht mit "MatrixVonWürfelB". Wie übergibt man noch den Parameter (z.B. int Zugehörigkeit = 1 (1 für A)) an den Shader? Das hab ich noch nicht verstanden.
- MatrixVonWürfelA setzen
- Würfel A zeichnen
- MatrixVonWürfelB setzen
- Würfel B zeichnen
-
Achso...
Aber dauert das nicht etwas lange, wenn man jetzt z.B. einen Menschen animiert? Da braucht ja jeder Knochen eine Matrix und wenn man die dann innerhalb eines Frames alle setzt...und das auf nem server mit sagen wir 30 Spielern also 30 Menschen?
Dauert das nicht zu lange?
-
Klar, in dem Fall wird man die Matritzen in einem Buffer ablegen und jedem Vertex einen Index verpassen, über den man dann die richtige Matrix aus dem Buffer lesen kann...
-
OK
Danke!Jetzt nurnoch die Frage oben