0

非アフィン変換を介して単位立方体を錐台 (切頭ピラミッド) に変換する方法に関するこのを見つけました。変換を行うマトリックススタックにプッシュできるマトリックスが必要です。この計算はどのようにできますか

x' = (M11•x + M21•y + M31•z + OffsetX) ÷ (M14•x + M24•y + M34•z + M44)
y' = (M12•x + M22•y + M32•z + OffsetY) ÷ (M14•x + M24•y + M34•z + M44)
z' = (M13•x + M23•y + M33•z + OffsetZ) ÷ (M14•x + M24•y + M34•z + M44)

単一の行列で表現されますか? 出来ますか?

今のところ、逆射影行列を使用して単位立方体を錐台に変換していますが、何かを選択したいときはいつでも、すべての 3d ポイントを w で除算する必要があります。

4

2 に答える 2

2

これらの方程式を表す同次行列は単純です。

       [ M11 M12 M13 M14 ]          [ 1 0 0 0 ]
  M =  [ M21 M22 M23 M24 ]  ,  M0 = [ 0 1 0 0 ]
       [ M31 M32 M33 M34 ]          [ 0 0 1 0 ]
       [ M41 M42 M43 M44 ]          [ 0 0 1 0 ]

単純Dに立方体のモデル データを乗算して切り捨てられたピラミッドを取得したり、カメラ + プロジェクションなどの他のマトリックスと積み重ねたりすることができます。

 ((M * D) * V ) * P;

'w' による除算について心配する必要はありません。4x4 マトリックスを使用すると、それがラスタライザーの最終段階に延期されます。

ここでの M0 は最も単純な射影行列です。ただし、これを利用するには、最初にカメラから離れた z 軸に沿って立方体を変換し、M0 を掛けて原点に戻す必要があります。変換行列 T を定義します。

       [ 1 0 0 0 ]
  T =  [ 0 1 0 0 ]
       [ 0 0 1 4 ]
       [ 0 0 0 0 ]

次に、(D * T * M0 * (-T)) は、その中心が原点から 4 単位離れているかのように透視変換を行った、切り捨てられたピラミッドです。

(免責事項: opengl m43 では -1 の可能性が最も高い)

于 2013-11-12T15:47:39.647 に答える
0

行列を計算するには、既に実装されている数学ライブラリを選択するのが賢明です。行列は通常、 から構成されprojection_matrix * vies_matrix * world_transform_matrixます。3 つの行列はすべてGLMなどのライブラリを使用して作成でき、その使用法は次のようになります。

glm::perspective(..args...) * glm::lookAt(..args..) * object_transformation

あなたの場合、キューブを表示するために投影のみを無視lookAtして使用することができます。object_transformation

于 2013-11-12T14:47:05.367 に答える