2012-02-17 9 views
3

私は、原点を基準として、例えばx、y、zのような点にオブジェクトを持っています。
ポイントに回転や平行移動などの変換を適用し、変換されたポイントでオブジェクトをレンダリングしたいとします。私はglTranslatef()glRotatef()の機能を使用しています。それは複雑な行列変換操作から私を保存していても、私は原点に対して最終位置の実際の座標値を知らないんだOpenGL変換

glTranslatef(x,y,z); 
glRotatef(Ang,0,1,0); // rotated around Y axis at an arbitrary angle 
glTranslatef(xt,yt,zt); // further translation 
<render the object> 

:それはこのようなものをいくつかに見えます。変換された点の実際の位置座標を取得する方法はありますか?

+0

あなたが何をしたいですか?指定された座標にオブジェクトを描画するか、あなたのように描画するrの例ですが、どういうわけか終わりの場所を知っていますか? –

+0

私は、変換された位置にオブジェクトを描画し、計算のために変換された座標を知る必要があります。 – itsraining

+0

@flopcoder修正された問題をなぜ質問に戻すのですか?たとえば、OpenGLでOpenGlではありません – Bart

答えて

3

あなたはglGetDoublevを使用してOpenGLの状態から行列を取得することができます。

GLdouble projectionMatrix[16]; 
glGetDoublev(GL_PROJECTION, projectionMatrix); 

GLdouble modelViewMatrix[16]; 
glGetDoublev(GL_MODELVIEW, modelViewMatrix); 

また、あなたが最初に翻訳した後、回転させたときに、あなたも、並進ベクトルを回転していることに、注意してください。 通常は、オブジェクトを原点で回転させてから変換します。その結果、変換の終点に回転したオブジェクトが作成されます。

編集:私はこれらの操作の種類のglmを使用することをお勧め

p' = projectionMatrix * modelViewMatrix * p 

が変換された座標にP」を取得するには、あなたがそれらの行列を使用してポイントPに変換する必要があります。

+0

ありがとうございます。私はそれを試してみます – itsraining

12

まず、いくつかの理論をお伝えします。 OpenGLは行列4x4とベクトル(点座標)の長さが4(3D)で動作します。

ベクトルX = (x,y,z,1)を持っています。私はあなたがmultiply matrixesにどのように知っていることを願っています。そしてポイントを V = (vx,vy,vz)で翻訳したいとします。

Translation matrix

そして、あなたは二つの行列(行列*ベクトル/ポイント)掛けます:Y = TX

Translation via matrix

あなたはこのようなtranslation matrixを構築する必要がありますことを行うには これを非常に複雑にする理由は(単にX + Vを追加するだけではなく)、同じ行列に異なる値を入力するだけで軸を中心にポイントを回転できるということです。 rotation matrixと呼ばれています:

Rotation matrices

最良の部分は、あなたがそれらの行列をチェーンことができるということです。あなたはこれらのルールとポイントを描画する必要がある場合:

  • は、あなたが一度にすべての作業を行います1つの行列を準備することができますT1
  • 回してR1
  • T2

を翻訳翻訳: F = T1R1T2

そして、すべての変換をpoinに適用するよりもすぐに:Y = FX

行列の乗算はcommutativeではないので、の順番は問題であることに注意してください。

OpenGLはこれらのマトリックスで動作します(scale matrixのような型はそれ以上ありません)。あなたは、コマンド(hereの例)で、現在の変換行列を取得することができます。

glGetDoublev(GL_MODELVIEW_MATRIX, redTransformationMatrix); 

そして、ここでは正確に(詳細な情報here)を、それらのデータを表現する方法は次のとおりです。

enter image description here

最後を除くすべての画像1つはから取られますwikipedia.org

関連する問題