Animal Crossingには、世界地図をスクロールするユニークな方法があります。キャラクターが下に移動すると、世界は段ボールのチューブにくっついているように、上部を回転します。
このビデオは、それがどのように動くかを示しています。
この効果を作成するにはどうすればよいですか?
Animal Crossingには、世界地図をスクロールするユニークな方法があります。キャラクターが下に移動すると、世界は段ボールのチューブにくっついているように、上部を回転します。
このビデオは、それがどのように動くかを示しています。
この効果を作成するにはどうすればよいですか?
回答:
私は、Deathspankをプレイした後に少し実験をしていましたが、これには同様の効果があります。うまく機能するように調整できるかどうかを確認するほど深く掘り下げたことはありませんが、1つの可能性は、深度に基づいて頂点シェーダーのアイテムを変更することです。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)
地平線上にあるものを間引くことを忘れないでください。そうしないと、全世界が包囲されます。
免責事項:私はこれをテストしておらず、数学の専門家でもありませんが、答えはこのようなものです。私が間違っている場合、誰かが私を修正してください。