2017-03-12 2 views
0

ich versuche zu implementieren:Wie konvertiert man Welt-Space-Transformation in Object-Space-Transformation?

transform.InverseTransformPoint(Vector3) und transform.InverseTransformDirection(Vector3) mit GLM-Bibliothek in opengl. Ich habe Ansicht, Projektion, Modellmatrizen für jedes Objekt.

eigentlich weiß ich nicht, was ich mit diesen Matrizen zu tun haben muss, um diese Methodenfunktionalität zu bekommen.

+0

Verwenden Sie einfach Vektorpositionsobjekte im Wortraum für die Transformation in den lokalen Raum. Warum möchten Sie Matrizen verwenden? –

+0

Hallo V. Borodinov, mein Objekt wurde gedreht und übersetzt, aus diesem Grund muss ich neue Position und Rotation im neuen Koordinatensystem berechnen. –

+0

Müssen nur Basismatrizen ändern –

Antwort

2

Normalerweise kann ein Punkt im lokalen Raum zu NDC Raum transformiert werden, indem die folgenden mathematischen tun:

Pworld = M * Plocal; 
Pview = V * Pworld; 
Pndc = P * Pview; 

wobei M = Modell, V = Ansicht und P = Projektion.

Also, wenn Sie einen Punkt in dem Weltkoordinatensystem haben und wollen, dass es in lokalem Koordinatensystem zu erhalten, müssen Sie nur die erste Gleichung invertieren:

Plocal = inv(M) * Pworld; 

Dies sollte transform.InverseTransformPoint(Vector3) gleichwertig sein (nur hinzufügen eine vierte Vektor-H = 1) -Koordinate

transform.InverseTransformDirection(Vector3) zu implementieren, die nicht von Skalen betroffen ist, muß man diese Gleichung verwenden:

Plocal = transpose(inverse(M)) * Pworld 

Hier ist M die obere linke 3x3-Matrix von Ihrem ursprünglichen Modell. Um zu verstehen, warum Sie diese Mathematik verwenden sollten, lade ich Sie ein, diese Seite zu betrachten: normal transformation

+0

Danke, es funktioniert so schön! –

Verwandte Themen