2

ポイントのような翻訳を適用する関数が必要glTranslate()です。乗算する行列を変更および取得するglTranslate()ような関数を知っている人はいますか?glRotate()

4

2 に答える 2

3

そこには何千もの自由行列クラスがあります。Google で検索すると、gl* 関数をまったく使用せずに平行移動と回転を設定できます。

編集:便利なマトリックスクラス以上のものを使用せずにマトリックスを作成したいだけの場合は、次のように glRotatef( angle, x, y, z ) を定義できます。

const float cosA = cosf( angle );
const float sinA = sinf( angle );
float m[16] = { cosA + ((x * x) * (1 - cosA)), ((x * y) * (1 - cosA)) - (z * sinA), ((x * z) * (1 - cosA)) + (y * sinA), 0.0f,
                ((y * x) * (1 - cosA)) + (z * sinA), cosA + ((y * y) * (1 - cosA)), ((y * z) * (1 - cosA)) - (x * sinA), 0.0f,
                ((z * x) * (1 - cosA)) - (y * sinA), ((z * y) * (1 - cosA)) + (x * sinA), cosA + ((z * z) * (1 - cosA)), 0.0f,
                0.0f, 0.0f, 0.0f, 1.0f
               };

ウィキペディアから引用。

平行移動行列は非常に簡単に作成できます: glTranslatef( x, y, z) は次のように定義されます:

float m[16] = { 1.0f, 0.0f, 0.0f, 0.0f,
                0.0f, 1.0f, 0.0f, 0.0f,
                0.0f, 0.0f, 1.0f, 0.0f,
                   x,    y,    z, 1.0f
               };

行列の乗算と行列とベクトルの乗算は非常に簡単に調べることができます。

ただし、あなたの人生をシンプルにするために、これらすべてを行うマトリックスクラスをダウンロードすることができます...

于 2010-12-14T12:39:53.533 に答える
1

ここでは、行列を使用した変換に関する一般的な情報を見つけることができます。

ここでは、行列の乗算(スケーリング、回転など)を実行する例と完全な関数を見つけることができます。これはObjectiveCで書かれていますが、c++で書き直すのは難しいことではありません。

于 2010-12-15T12:07:15.450 に答える