X、Y、Z座標標準?


12

それにもかかわらず、ゲームの3D開発は初めてです。チュートリアルと例を読むと、X / Y / Z座標は最初の推測よりも少し逆になっているように見えます。

人がフィールドの周りを歩いていると、X / Y位置が変化し、ジャンプまたは丘を上ったり下ったりすると、Z位置が変化すると想像していました。私の仮定は間違っているように見えます。なぜなら、フィールドの周りを歩くとX / Zが変わり、丘をジャンプしたり、上下に移動するとYが変わるからです。

1)私の観察は正しいですか?3Dは私にとって新しいものであり、物事について適切に考えていないかもしれません。

2)X / Zである水平移動とYである垂直移動の背後にあるロジックは何ですか?

3)XNA FrameworkでX / Yを水平方向の移動として使用し、Zを垂直方向の移動として使用するのは、私にとってそれほど間違っているでしょうか?


左/右手の座標系。DirectXは左手、OpenGLのデフォルトは右手です。
ジョナサンコネル

回答:


19

あなたの仮定は間違っていません:各エンジンはこれらの座標を異なって扱います。一般的に、Xはほぼ常に東西軸ですが、YまたはZが高度軸であるかどうかは異なる傾向があります。私が理解しているように、Quake 3、ソースエンジン、およびトルクエンジンはすべてZがアップしています。モデリングツール3DS Maxも同様です。珍しいことではありません。

表現をより少ない次元に平坦化する方が理解しやすいように、大まかに重要度の高い順に並べられた座標系を持つことは理にかなっています。たとえば、ゲームが2Dの高さマップに設定されている場合、3DワールドのX座標とY座標が高さマップのX座標とY座標に直接マップされるため、Zが「上」になるのは理にかなっています。一方、主にレンダリングの観点から考えると(そして多くのゲームエンジン開発者がそうするように)、XとYが画面座標であることに慣れているので、3番目の軸を追加すると、当然画面に出入りします。

あなたにとって最も簡単なものを使用してください。ただし、選択は任意であり、それらの間で変換し、1つのプログラム内で複数の座標系を使用する必要がある場合があることに注意してください。


私は実際に他の2つの答えがより好きですが、これは受け入れられた答えなので、Yが垂直であり、Zが画面に入ることは、ほとんどの3DハードウェアAPIが動作するように設定されている方法です(DirectXおよびOpenGL) 。独自のシステムが必要な場合は、何らかの翻訳が必要になる可能性があるため、これに注意してください。(不適切に使用されているものの、一貫して必要に応じて機能することが多いため、「かもしれない」:))
ジェームズ

1
技術的にOpenGLでは、方向を含めるとデフォルトでZが画面から出てきます。そのため、DirectGLとDirectXの両方が表示方向と平行なZを持っていますが、まだ互換性がありません。3Dを使用するときは、回転、変換、スケーリングを介してある座標系から別の座標系に移動する能力が必要です-実際、これがモデルの世界的な成り行きです-だから、あまりにも概念に執着することはあまりありません標準。
キロタン

数百万の三角形を扱うときは、ハードウェアのコーディアンテシステムと戦うためにやる必要が少ないほど良いかもしれません;)結局のところ、ストレスレベルにもかかわらずゲームを作るのは楽しいです。 )
ジェームズ

画面に出入りする、または高度であるという「Z」の概念は、やや誤解を招く恐れがあります。変換を概念化する方が簡単かもしれません。最終的に2Dウィンドウ空間に変換されるが、深さの値を持つ3D / 4D頂点座標を送信します。APIが本質的にX、Y、またはZの3D座標を「深さ」にマッピングするという考えは実際には正しくありません。座標の意味を交換する変換を思い付くことができます。その変換の最後に、2Dウィンドウ空間座標と深度値を取得します。
PatrickB

1
ただし、残りの部分で意見が一致しない場合は完全にはわかりません:もちろん、最終的にx、y、depthに投影できる限り、任意の座標空間を使用できますが、この質問は主に特定の規則が存在する理由に関するものです座標系の場合、慣例は必然的に実世界の概念にリンクされます。
カイロタン

6

チャートが描かれた目の前に差し出された一枚の紙を見て想像してください。通常、軸には底部を横切るXと垂直方向のYというラベルが付いています。これにより、Zは地面に沿った外側の軸になります。

これは単なる慣習ですが、グラフィックスで多く使用されており、Zをシーンの深さと考えています。

CADなどの他のフィールドでは、バージョンがより一般的です。


4

考え方は、x軸とy軸が同じままであるということです-yは画面上で「上」で、xは横向きです。

z-3番目の次元。画面に投影し直します(ここでは利き手の問題を無視します)。3次元では、これは少し奇妙になりますが、画面スペースに物を配置するためには、より理にかなっています。

3)必要に応じてできますが、それは苦痛で不格好です。Z-projects-into / out-of-the-monitorに慣れることをお勧めします。


1

1)はい、あなたの観察は正しいです。

2)標準のグローバルXYZ座標系は、空の(同一性)変換行列を使用してシーン内のキャラクターの目を通して見るときに、一人称シューティングゲームの観点から考えると意味があります。紙に座標系を描くときのように、Xは右を指し、Yは上を指します。右手の法則(x->親指、y->人差し指、z->中指)に従って、Zはあなたの方を指します。

3)それは間違っていませんが、標準からの転換です。現時点で考えられる3つの問題があります。(a)ある日、標準座標フレームを使用する物理ライブラリを使用したいとします。あなたが標準に従わなかった場合、今、あなたはあなたの世界から物理学の世界にあなたを連れて行く変換について考える必要があります。バグを修正したいときは迷惑になります。(b)コードを誰かと共有したり、誰かを開発に導いてもらいたい場合、彼らはあなたの慣習に慣れなければなりません。(c)標準の3Dモデルを使用する場合、常に横向きにならないように、それらの上に変換が必要です。

質問2に追加するために、X、Y、およびZを3文字だけでなく、上下左右に考えると非常に便利です。シーン内のすべてのキャラクターにはローカル座標系がアタッチされており、ローカル座標フレームではXは常に正しい、Yは上、Zは後ろになります。これができたら、今度は印刷するベクトルの意味を理解したり、意味のある方法でアルゴリズムを記述したりできます。AとBの2人のキャラクターがいて、一方が他方に直面している場合に何かをしたいとしましょう。Aの座標フレーム(Ta ^ -1 * p_b)でBの位置を簡単に見つけることができます。得られたベクトルを見て、Z(backwards)が負で、X(right)とY(up)が小さいかどうかを確認します。 BがAに対してどれだけ後方、右、上にあるかを示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.