Wie Vertices an Projection Matrix anpassen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
theunreplicated
Beiträge: 1
Registriert: 01.12.2013, 19:23

Wie Vertices an Projection Matrix anpassen?

Beitrag von theunreplicated »

Hallo,
ich hab schon seit längerer Zeit n Problem,ich zerbreche mir schon fast den Kopf daran.

Und zwar würde ich es gerne so machen,dass die Vertices von den Objekten so angepasst werden,dass sie bei Anwendung des Projection Matrix noch zu sehen sind.
Denn momentan sind sie wohl außerhalb dem View Space.

Meine Frage ist:Wie kann ich das hinkriegen,dass die Vertices alle im View Space sind?
Es soll dann nachher so sein,dass wenn ich Meshes mit Assimp importiere,dass diese automatisch so skaliert werden,dass das im komletten View Space sichtbar sind.

Irgendwie muss doch dass auch AssimpView machen.Doch aus dem Code wurde ich nicht wirklich schlau daraus,es scheint zwar die Funktion ScaleAsset zu geben,die die g_mworld matrizen erstellt,nur sind die wohl unabhängig von dem Projection-Matrix,oder irre ich mich da?

Ich hatte mir auch schon mehreres überlegt.
Z.B. wollte ich das so machen,dass ich die Abstände der jeweils größten und kleinsten Koordinaten vom Mesh berechne,dann mit dem Projection Matrix nach den NDC-Koordinaten -1,1 eine Gleichung aufstellen und dann die Wert in World Space auflöse.Anschließend wollte ich dann noch aus denen mit den Abstände der jeweils größten und kleinsten Koordinaten verrechnen,um dann den Scalefaktor für ne Skalierungsmatrix zu bilden.Verschiebung wollte ich auch noch bestimmen,nur leider ging das alles nicht.
Unprojection scheint auch nicht die Lösung zu sein ,da w!=1.
Bin also ziemlich frustriert.

Kann mir da jemand weiterhelfen?
Wäre sehr dankbar
Benutzeravatar
xq
Establishment
Beiträge: 1590
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Wie Vertices an Projection Matrix anpassen?

Beitrag von xq »

Die Lösung dürfte relativ einfach sein:

Lade deine Modelle, bestimme die Bounding Box. Danach skaliere und verschiebe das Modell so, dass es eine Bounding Box der Größe (1,1,1) hat und deren Zentrum im Fokus deiner Kamera liegt.

Verschiebe das Modell so, dass

Code: Alles auswählen

center = 0.5 * (max + min)
und

Code: Alles auswählen

scale = 2 / (max - min)
Dadurch wird dein Modell auf einen Würfel mit Kantenlänge 1 reduziert, den kannst du dann mit deiner kamera prima fokussieren.

Du solltest scale natürlich so berechnen, dass das modell nicht verzerrt wird ;)

Für Fehlerfreiheit garantiere ich nicht, aber ich hoffe meine Idee kommt raus.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Antworten