私はJavaで3Dレンダラーを作成しています。これは現在、ポイントとラインを使用して立方体のワイヤーフレームをレンダリングし、立方体を回転させることができます。問題は、Zはどうあるべきかということです。そして、何をZに設定する必要がありますか?立方体のサイズをZに設定する必要があると思いますか?
御時間ありがとうございます!どんな答えでも大歓迎です。
Zは通常、現在のビューポートがxy平面にある場合、面外方向を意味します。
3Dの世界には独自の座標系があります。レンダリングすると、3Dワールド座標からビューポート座標に変換されます。
3Dは3つの「次元」を意味します。1つの次元は「X」、もう1つの次元は「Y」、3番目の「Z」です。固有の方向はありませんが、通常は「進む」、「左」、「上」などの方向を割り当てると便利です。
X、Y、およびZの値がすべて0に等しいものは、原点、つまり空間の中心にあります。これは(0,0,0)と書くことができます。ここで、パラメーターの順序は(x、y、z)です。
位置(1,0,0)の点または頂点は、原点からX方向に1単位です。したがって、(0,0,0)から(1,0,0)に移動した場合、純粋にX方向に移動することになります。
(0,1,0)は、原点からY方向に1単位です。
(0,0,1)は、原点からZ方向に1単位です。
(1,1,0)は、X方向に1単位、Y方向に1単位です。したがって、Xが「前方」を意味し、Yが「左」を意味する場合、(1,1,0)は原点の前方と左側になります。
したがって、基本的な立方体は次の頂点で定義できます。
(1,1,-1)
(1,-1,-1)
(-1,1,-1)
(-1,-1,-1)
(1,1,1)
(1,-1,1)
(-1,1,1)
(-1,-1,1)
私はあなたがここでいくつかの基本的な学校の数学/幾何学を逃しているかもしれないと思います。しかし、実際にはそれほど理解するのは難しいことではありません。
平らな面、たとえば一枚の紙を想像してみてください。
最初の座標軸は左から右にまっすぐ進み、Xと呼びます。したがって、X = 0は、ポイントが左側の境界上にあることを意味します。X = 10は、ポイントが右側の境界にあることを意味する場合があります(実際には、1の単位を定義する大きさに依存します。これは、センチメートル、インチなどの場合があります)。これは、1次元(左から右)のある点を説明するのにすでに十分です。
次に、2番目の軸が必要です。それをYと呼びましょう。それは上の境界線(Y = 0)から下の境界線(Y = 10)まで走っています。これで、2つの位置があるため、平面上の任意の点を記述することができます。たとえば、(0、0)は左上隅になります。(10、10)は右下隅になります。(5、0)は、上部の境界線の中心点などになります。
さらに別の次元を追加するとどうなりますか?それをZと呼びます。これは基本的にシートからのポイントの高さになります。たとえば、Z = 0は、ポイントが画家のシート上にあることを意味し、Z = 10は、ポイントが紙の10cm上にあることを意味します。ここで、3つの座標を使用して点を記述します。(5、5、0)は紙の中心です。(5,5,5)は、紙の上に置かれ、高さが10cmの立方体の中心です。
3Dでプログラミングする場合、同じ用語を使用できます。唯一の本当の違いは、いわゆる投影/ビューマトリックスを使用して、この3D位置を画面に表示する方法を決定していることです。最も簡単な変換は、次の行列です。
1 0 0
0 1 0
これに3D座標を掛けると、次の2つの項が得られます。
2d-x = 3d-x 2d-y = 3d-y
これにより、立方体(または表示しようとしているもの)を真上から表示し、本質的にZ軸を無視します(何らかの3Dメガネまたは同様のテクノロジーを使用しない限り、ディスプレイから突き出たものをレンダリングすることはできません) 。
全体として、座標をどのように使用して解釈するかはあなた次第です。通常、xとyは平面(地面上の位置または2Dワールド内の位置)を指し、zは高さまたは深さ(前面または背面)の場合があります。それは本当に特定のケースに依存します。しかし、一般的には、それは実際にはxやyのような別の次元です。