In Blender habe ich eine Kugel mit einer Panorama-Textur auf der Innenseite erstellt. Ich habe auch manuell ein ebenes Netz erstellt (gebogen, um der Größe der Kugel zu entsprechen), das sich an der Innenwand befindet, wo ich eine andere Textur zeichnen kann.
Das ist großartig, aber ich möchte die manuelle Arbeit wirklich reduzieren und einige dieser Arbeiten in einem Skript ausführen - beispielsweise eine Variable für das Panoramabild und die Koordinaten des Bereichs auf dem Foto, den ich durch einen neuen ersetzen möchte Gittergewebe.
Der schwierigste Teil dabei ist die Erstellung eines gekrümmten Netzes im Code, das an der Innenwand einer Kugel sitzen kann.
Kann mich jemand in die richtige Richtung weisen?
unity
mesh
dynamic-mesh
user5025
quelle
quelle
Antworten:
Was Sie erreichen wollen, scheint sehr eng damit verbunden zu sein:
Analog zu sphärischen Koordinaten in n-Dimensionen
In Ihrem Fall in zwei Dimensionen verwenden Sie einfach diese Formel, um die Eckpunkte des Rechtecks abzubilden, das Sie auf Ihrer Kugel haben (hoffen wir, dass es unterteilt ist) (vergessen Sie nicht, irgendwo mit dem halben Durchmesser zu multiplizieren. Nur Mathematiker leben auf einer Einheitskugel, alle anderen anständige Leute benutzen Durchmesser ...)
EDIT: Da dies alles etwas vage ist, gebe ich einige weitere Einblicke. Was Sie von dieser Formel benötigen, um verwendet zu werden:
θ und φ sind die sphärischen Koordinaten, nach denen Sie suchen (Breite und Länge), um sie zu erhalten. Nehmen Sie die x / y-Koordinaten der Punkte auf einem Teil des Panoramabilds als solche:
Dann würden Sie Ihr Quad auf einer Kugel abbilden lassen, basierend auf seiner xy-Position auf einem 2D-Koordinatensystem, das gemäß der Kugelabbildung in die 3D-Position auf dem Raum übersetzt wird.
EDIT: Ich habe gerade eine Idee, um weiter zu gehen, könnten Sie die Koordinaten der Ebene auf der Kugel mit UV-Werten als solchen kapseln:
Dort können Sie die Quad-Position in Ihrer bevorzugten 3D-Software (oder sogar durch Code durch Einheit) verwalten, indem Sie einfach UV-Werte zuweisen (wenn auf beiden Achsen 0 bis 1 liegt, wird Quad um die Kugel gewickelt).
WARNUNG: Für die Verwendung von UV-Strahlen müssen Sie eine Umrechnung von Bogenmaß in Grad durchführen. (da UV 0 zu 1 ist)
quelle
Die Antwort von Géry Arduino oben hat mich in die richtige Richtung gelenkt, aber ich möchte hier einige Dinge hinzufügen.
1) Das Folgen funktioniert aufgrund von Unterschieden im Koordinatensystem nicht in Einheit
Ändern Sie dies in
2) Der Eingabebereich der in der Methodensignatur definierten Long- und Lat-Werte war mir nicht klar
Sowohl der Längen- als auch der Breitengrad sollten im Bogenmaß angegeben werden. Ihre Reichweite ist wie folgt
quelle