Vous voulez passer d'un monde planaire à un monde cylindrique.
Une rotation autour de l'axe x (en coordonnées homogènes) ressemble à ceci:
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
Où:
ca = cos(angle) and sa = sin(angle)
Pour calculer l'angle, regardez l'image. Le pi / 2 s'annule et vous vous retrouvez avec:
angle = offset_from_character.z - radius
Regardez aussi l'image. L'angle du point projeté dépend de la distance horizontale du personnage, la distance de la sphère dépend de la verticale.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
assurez-vous de supprimer les choses qui se trouvent à l'horizon, sinon le monde entier s'enroulera.
Avertissement: je n'ai pas testé cela et je ne suis pas un expert en mathématiques, mais la réponse est quelque chose comme ça. Quelqu'un, s'il vous plaît, corrigez-moi si je me trompe.