挨拶全て、画像に見られるようOpenGL、ワールドツーオブジェクトの座標マッピングですか? (逆行列)
、
IはO(linestripesのセット).Itsオブジェクト座標系名前付きオブジェクトを有する(X」であり、 y '、z')である。私が翻訳し は、次のコードスニペットを使用して、私のOpenGLのシーンでこのオブジェクトを回転させる:
glPushMatrix();
glTranslatef(Oz, Oy,Oz);
glRotatef(rotationX , 1.0, 0.0, 0.0);
glRotatef(rotationY, 0.0, 1.0, 0.0);
glRotatef(rotationZ, 0.0, 0.0, 1.0);
contour->render();
glPopMatrix()
。
私は
私が正しいだ場合
glPushMatrix();
glTranslatef(hx,hy,hz);
glPopMatrix();
、(オズ、オイ、オズ)及び(HX、HYを使用して座標(HX、HY、Hz)で世界に翻訳さHと呼ばれるポイントを、持っています、 hz)は世界座標です。
ここで、Oのオブジェクト座標系(x '、y'、z ')に対するH(hx、hy、hz)の位置を計算します。 私が理解したように、私はオブジェクトOの逆変換を計算し、点Hに適用することでこれを行うことができます。
これに関するヒント? OpenGLは逆行列計算のための関数を提供していますか?どういうわけか逆行列を見つけたら、それらを乗算する順序は?
注:ポイントHでは、半径Rの球を描画するツールのようなハンマーを実装したいと思います。ユーザーはこの球を使用して、ハンマーのようにオブジェクトOを切り取ることができます。これを2Dで実装しました。ハンマーの位置を計算できるのであれば、同じアルゴリズムを使うことができます。 (x '、y'、z ')に対する相対
ありがとうございます。
私があなたの質問を理解していれば、 '{Ox-hx、Oy-hy、Oz-hz} '(つまり' glTranslatef(Ox-hx、Oy-hy、Oz-hz) )?あなたが既にグローバルベクトル 'O'と' h'を持っているならば、それはベクトル減算の単純な問題です。ところで、オリジナルのソリューションは正しいと言えます。 – MrGomez
こんにちは、私はオブジェクトOの元のオブジェクト座標を変更する必要があります。つまり、私は世界座標ではなく、オブジェクト座標を比較する必要があります。 –
心配はいりません。速いリフレッシャーは、OpenGLが汎用マトリックスライブラリを提供していないことを思い出させました。それには別のライブラリを使用するか、計算を実行する必要があります(http://mathworld.wolfram.com/MatrixInverse.html)。 – MrGomez