Frage

Ich fand eine Bibliothek mit dem Namen Pyeuclid und es scheint zu tun, was ich will In Bezug auf 3D -Mathematik. Es verbindet eine 3D -Vektorklasse und eine 4x4 -Matrixklasse, die Transformationen wie Drehen, Translate und Skalierung in der Lage ist.

Matrix Die Schöpfung ist einfach, einfach die Argumente weitergeben und die Matrix wird erstellt.

>>> m = Matrix4()
>>> m.translate(50,50,50)
Matrix4([    1.00     0.00     0.00    50.00
             0.00     1.00     0.00    50.00
             0.00     0.00     1.00    50.00
             0.00     0.00     0.00     1.00])

Der LBRARY wird mit einer 3D -Vektorklasse geliefert, wenn ich einen 3D -Punkt mit dieser Matrix übersetzen wollte, müsste ich zuerst die erstellen Vektorklasse, so was.

>>> v = Vector3(100,200,300)
>>> v
Vector3(100.00, 200.00, 300.00)
>>> v.x
100
>>> v.y
200
>>> v.z
300

Jetzt verfügt die Matrix4 () -Klasse mit einer Methode, um Koordinaten zu transformieren, und sie wird so verwendet.

>>> m.transform(v)
Point3(150.00, 250.00, 350.00)

Dies ist jedoch großartig, es wird jedoch keine Perspektivprojektion angewendet, die Bibliothek wird mit einer Methode namens matrix4.New_Perspektive (FOV_Y, Aspekt, in der Nähe, weit) ausgestattet. Dort liegt das Problem, ich habe keine Ahnung, wie ich diese Funktion richtig verwenden soll (M.Transform (Vector3) produziert alles Nutzbare) die Dokumentation Zeigt, wie es mit Vektoren oder anderen Matrizen verwendet wird.

Dies ist das Modul (aus Euklidimportvektor3, Matrix4)

Was ich nicht will, sind Empfehlungen für eine Game Engine/Visulization -Bibliothek oder etwas, das darauf aus ist, etwas auf den Bildschirm zu zeichnen. Ich möchte nur wissen, ob ich diese Bibliothek verwenden kann, um 3D -Vektorkoordinaten in 2D -Bildschirmkoordinaten zu verwandeln, und ob Nicht welche Bibliothek kann ich verwenden ???

Also geh rein und hilf Noob in Not! :-) Ich danke Ihnen für Ihre Hilfe.

War es hilfreich?

Lösung

Dieses Tutorial erklärt die Argumente an Gluperspektive (), und sollte übertragen, da Ihre Bibliothek damit als Modell geschrieben wird.

Ich würde erwarten, dass die Methode von New_Perspective () wie ein Konstruktor funktioniert, dh sie gibt eine Matrix zurück, die als Perspektive -Transformation eingerichtet ist. Sie sollten dann in der Lage sein, Weltraumkoordinaten in perspektivisch projektierte Koordinaten zu verwandeln, indem Sie Vektoren mit dieser Matrix multiplizieren.

Andere Tipps

Ich weiß nicht, ob dies relevant ist, da Sie dies vielleicht bereits kennen, aber Sie benötigen auch eine Ansichtsmatrix. Die Sichtmatrix repräsentiert die Umkehrung der Transformation Ihrer Kamera in der Welt. Möglicherweise finden die Matrixklasse auch Helfermethoden zum Erstellen von Ansichtsmatrizen, die manchmal als Lookat OS ähnlich bezeichnet werden. Alternativ erstellen Sie einfach eine Matrix manuell, die Ihre (imaginäre) Kamera positioniert und orientiert und dann umkehren.

Wenn Sie die Projektionsmatrix auf World Coords anwenden, gehen Sie implizit an, dass Ihre Sichtmatrix die Identität ist und Ihre Kamera im Ursprung der Welt ist und eine Achse hinunterzeigt. Welche Achse, die das ist, hängt von der Projektionsmatrix ab, aber wenn es wie die meisten anderen Systeme ist, wird es die Z-Achse sein, da die Konvention die Kamera-Tiefe entlang z gemessen hat. Es kann sich entweder in der positiven oder negativen Richtung befinden. Überprüfen Sie also erneut die Dokumentation für Details.

Zusammenfassend müssen Sie Ihre Modellmatrix mit der Ansichtsmatrix und multiplizieren dann durch die Projektionsmatrix. Die Projektionsmatrix ist so konzipiert, dass sie in Kamerakoordinaten und nicht in Weltkoordinaten arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top