2017-05-23 13 views
0

私はこの絵を持って、私はの左の位置の家に右の位置の家から取得する必要があります:OpenGLのそれでenter image description hereどのように私は特定の場所(のT *のR *のS)に到達するために行列を掛けることができ

まあ、

glTranslated(6,0,0); 
    glRotated(30, 0, 0, 1); 
    glScaled(2, 2, 0); 

しかし、私はそれが実際に「裏の場面」でどのように機能するかを理解しようとしています。 私はポイントを取る、左下の1と言うことができ、そこから動作しますか?

例えば:

V1 =(0,1,0,1) と第1行列は、翻訳ものであろうので、私は によってX = 6変換行列、Y = 0、Zそれを掛けます= 0.v2 =(6,1,0,1)の新しいポイントを取得し、そこからスケールと回転行列を続けますか?

質問:これを行うために必要な均一なマトリックスは何ですか?

私は

答えて

1

行列の乗算は可換ではありません...それはちょうどそのために、T R S行列を乗算され、それは私が必要とする行列を生成しますね。これは、回転の後に続く平行移動が、回転に続く回転と同じではないという幻想的な方法です。あなたが一例を取り上げれば、すぐにそのアイディアを得ることができます。

ここでは、使用することができる、事前に乗算する、または後で乗算するという2つの規則があります。ほとんどのグラフィックスシステムでは直感的ではないため、最後に適用された操作が最初に適用されます。これにより、階層構造の上位に翻訳された階層型システムを扱うことが容易になります。このシステムでは、回転にフィードしたくないため、大きなクランク軸の動きが生じます。これは、一連の操作を手作業でプログラミングするときに何が起こるのかを少し難しくしています。後ろ向きに作業し、最後に回転を適用するのが一般的なルールです。

+0

Thx Malcolm。非常に詳細 –

1

Malcom McLeanが言ったことは真実です。私は今TRS であると言いたいと思っています。必要な行列です。行列を頂点に適用する前に行列を掛ける必要があります。 TRS * vは、S *(R *(T * v))を行うのとは逆です。これは、翻訳、回転、次にポイントのスケーリングを行うことに関する話です。 TLDR;単一の行列に結合された変換は、それらの乗算の逆の順序で適用される。例えばTRS * v =>スケール、回転、変換v。

+0

感謝rationalcoder! –

関連する問題