답변:
나는 Deathspank를 연주 한 후에 약간의 실험을했는데 비슷한 효과가 있습니다. 잘 작동하도록 조정할 수 있는지 충분히 조사하지는 않았지만 한 가지 가능성은 깊이를 기준으로 정점 셰이더의 항목을 수정하는 것입니다. cos (depth)를 Y 축 수정에 매핑하는 함수가 작동합니다. 거리가 멀어 질뿐만 아니라 깊이보다 가까워지면 세상이 특히 둥글게 느껴지도록 조정할 수 있습니다. X 축 값에 대해 더 구형으로 보이도록 동일한 작업을 수행 할 수 있습니다. 이것이 그러한 게임이 실제로 어떻게하는 것인지 잘 모르겠습니다. 내 실험은 만족스럽지 못한 결과를 얻었지만 비율을 많이 사용하지 않았으므로 감소율을 변경하여 더 좋게 만드는 것만 큼 간단했을 수 있습니다.
그냥 "평평한 세계"를 가져 와서 원통형 좌표에 매핑하는 것처럼 보입니다 . 기본적으로 실린더에 세계를 포장합니다. 나는 평평한 세상과 비슷한 것을했지만 구체에 감쌌습니다.
구체에 대해 한 방법은 실린더에 대한 방법과 유사합니다. 세계에 적합한 반지름 (원통 좌표의 ρ 또는 "rho")을 선택하십시오. 각 정점에 대해 월드의 XZ 좌표 (Y는 높이라고 가정)를 취한 다음 XZ와 반지름 + Y를 사용하여 원통형 좌표로 은밀합니다. Y를 추가하지 않으면 평평한 원통이됩니다. 그런 다음 직교 좌표로 다시 변환하여 게임에 그립니다.
평면 세계에서 원통형 세계로 가고 싶습니다.
x 축을 중심으로 한 회전 (동일한 좌표)은 다음과 같습니다.
| 1 0 0 0 |
Rx = | 0 ca -sa 0 |
| 0 sa ca 0 |
| 0 0 0 1 |
어디:
ca = cos(angle) and sa = sin(angle)
각도를 계산하려면 이미지를보십시오. pi / 2가 취소되고 다음이 남습니다.
angle = offset_from_character.z - radius
또한 이미지를보십시오. 투영 된 점의 각도는 문자와의 수평 거리에 따라 다르며 구와의 거리는 수직에 따라 다릅니다.
new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)
지평선 너머에있는 물건을 잡아야합니다. 그렇지 않으면 전 세계가 감쌀 것입니다.
면책 조항 : 나는 이것을 테스트하지 않았으며 수학 전문가는 아니지만 대답은 다음과 같습니다. 내가 틀렸다면 누군가 나를 수정하십시오.