Преобразование угла на поверхности кубической карты в угол на сфере - PullRequest
0 голосов
/ 01 августа 2020

Предположим, у меня есть объект, который движется по поверхности кубической карты следующим образом: enter image description here

Here's an illustration of the movement: https://i.imgur.com/HxdGfn9.mp4

Я знаю грань куба, на которой находится объект , 2D-положение объекта внутри этой грани и вектор направления «вперед» этого объекта. Зная грань и положение на грани объекта, легко вычислить положение «сферы» этого объекта, то есть положение в трехмерном пространстве, в котором объект окажется после того, как кубическая карта будет наложена на сферу.

Однако, как я могу вычислить трехмерный «прямой» вектор объекта после того, как кубическая карта обернута вокруг сферы? Один из подходов, который я пробовал, был похож на sphere_forwards = to_sphere_cords(face, position_2D + forwards_2D * N) - to_sphere_cords(face, position_2D);. (Обратите внимание, что занятие позиции внутри грани куба и добавление к ней чего-либо может привести к положению за пределами этой грани. У меня есть специальный код для исправления «переполнения» положения. (Например, на картинке выше, если вы шли «вверх» по грани 5, вы начнете ходить «вниз» по грани 2 после того, как пересечете границу грани 5/2)). Проблема с этим методом заключается в том, что при переходе между двумя гранями происходит "рывок" в сфере. При увеличении N этот «рывок» становится более плавным, но все же нежелательным. Я объясняю это тем, что прямая линия на кубической карте между двумя гранями на самом деле имеет резкий изгиб на поверхности сферы, как показано на рисунке: введите описание изображения здесь

Итак, мой вопрос: есть ли способ непрерывно отображать вектор угла / прямого направления на поверхности куба в вектор прямого направления, касательный к поверхности сферы, без некрасивых переходов в векторе между куб граней? Мне нужен метод, который работает на любой грани куба, например, он не должен выходить из строя на / около северного полюса или около углов граней куба.

...