Sie möchten von einer planaren Welt zu einer zylindrischen Welt wechseln.
Eine Drehung um die x-Achse (in homogenen Koordinaten) sieht folgendermaßen aus:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
Wo:
ca = cos(angle) and sa = sin(angle)
Sehen Sie sich das Bild an, um den Winkel zu berechnen. Das pi / 2 bricht ab und Sie bleiben mit:
angle = offset_from_character.z - radius
Schauen Sie sich auch das Bild an. Der Winkel des projizierten Punktes ist abhängig vom horizontalen Abstand zum Zeichen, der Abstand zur Kugel ist abhängig von der Vertikalen.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
Stellen Sie sicher, dass Sie Dinge aussortieren, die über dem Horizont liegen, da sich sonst die ganze Welt dreht.
Haftungsausschluss: Ich habe das noch nicht getestet und bin kein Mathematikexperte, aber die Antwort lautet ungefähr so. Bitte korrigiert mich jemand, wenn ich falsch liege.