2016-07-25 10 views
0

このページhttps://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/は、3Dオブジェクトを別のオブジェクトに向けるように回転することができる関数 'LookAt'を記述する。ルックアット関数の内部動作について説明(ただし、コードに記載されていない)されているとして:LookAt関数

機能が動作する方法は、エンティティを受け取り、 位置を標的とし、バックベクトルを取得するために、それらを減算することです。次に、 を計算して、上のベクトルと後のベクトルの積を計算し、 右のベクトルを取得します。次に右の ベクトルと後ろのベクトルとの積を計算して、方向ベクトルと右ベクトルの両方を に直交するアップベクトルにし、最後に回転行列Matrix3x3の3つのベクトルをそれぞれ 行に正規化します。

私はこれを3D関数のライブラリなしで複製しようとしています。私は3次元ベクトル減算、行列乗算、ドットとクロス積関数を持っています。 (私はLuaでコーディングしています)

私が理解できないことは、あるオブジェクトを別のものと同じ方向(そしてうまくいけば、向き)にする方法です。

これは、角度に基づいて回転行列を作成することの問題であることを読んだが、私が見つけたものはすべて3Dで角度を返すということは、1つの角度を返すことで終了する - 私は3つの角度各平面について。

この回転行列はどのように構成しますか?私はオブジェクトの向きがわからないので、オブジェクトの現在のx、y、z角度を計算するのが問題です。私は必要なのは、オブジェクトの現在の3次元角度を決定する関数と、それを別のオブジェクトの回転行列に変換する方法です。すべての

答えて

-1

まず:

オブジェクトが方向性を持っていない場合は、特定の方向にオブジェクトをオンにすることはできません。 オブジェクトの向きを定義するベクトルを知っているか、自分で定義する必要があります。

ルックアット関数の内部動作について説明(ただし コードに記載されていない)されている。

これは真実ではありません。彼らは、記事を読んでいる間あなたの頭に浮かんできたかもしれない質問を含むFAQをリンクします。 (読むより慎重!)

ザ・は、以下の情報をご提供します。角度の数があなたの問題について

What is the algorithm behind lookAt inside Matrix3x3: 
The abbreviated algorithm is: 

z.set(back_direction).normalize(); 
x.set(up).cross(z).normalize(); 
y.set(z).cross(x); 
m[0] = x[0]; 
m[1] = x[1]; 
m[2] = x[2]; 
m[3] = y[0]; 
m[4] = y[1]; 
m[5] = y[2]; 
m[6] = z[0]; 
m[7] = z[1]; 
m[8] = z[2]; 

あなたの周りの3を回転させる場合にのみ、3つの角度を必要とします軸。 x、y、zのようなものである。 しかし任意の軸を中心に回転することができます。もちろん、角度は1つだけ必要です。

線形代数に関するテキストブックを入手するか、Webでチュートリアルとサンプルを参照してください。あなたがしていることを理解していることを確認してください。サンプルコードなしで将来の問題を解決するのに役立ちます。それは簡単な数学です。

関連する問題