2012-01-06 22 views
1

私はビデオを以下に示すように、翻訳/回転をacheiveしたい -翻訳+回転を行った後のOpenGL独立翻訳?

http://www.youtube.com/watch?v=92h0xuV4Yrg

私が知っている独立した並進と回転のために、典型的な方法がある - 最初のオブジェクトを回転させ、その後、翻訳します。

ここに示されているように:

PushMatrix(); 
LoadIdentity(); 
Translate(posx,posy,posz);  // Second, move the object to its final destination 
Rotate();  // First, apply rotations (which rotate around object-origin 
Draw();   
PopMatrix(); 

しかし、私の需要量は、世界座標とマウスを使って移動を中心にオブジェクトを回転させることです。

ビデオで見られるように、回転がないオブジェクトorigin.Thatの周りの世界、原点を中心に行われているが、ロジックは、上記とは逆であるべき意味(最初に翻訳した後、回転を行う)

PushMatrix(); 
LoadIdentity(); 
Rotate();  // Second, apply rotations (which rotate around world-origin) 
Translate(posx,posy,posz);  // First, move the object to its final destination 
Draw();   
PopMatrix(); 

しかし、ビデオの最終的な翻訳は、回転後の最終的な位置に対して行われます(これはマウスを使って操作するposx、posy、poszの値とは異なります)。そのポイントは、である必要はありません

translate (-x,-y,-z); 
rotate (angle); 
translate (x, y, z); 

:任意の点の周りのオブジェクト(X、Y、Z)、あなたは次の操作を行うに回転させるには、翻訳

+1

ワールドスペースまたはオブジェクトスペースでの最終的な翻訳はありますか?オブジェクト空間内にある場合は、スタック上の別の行列を押して移動するだけで済みます。 –

+0

すべての翻訳は世界の宇宙にある。 –

+0

私はあなたの質問に従うことができません、ちょうど任意の位置の周りにオブジェクトを回転しようとしていますか? – cmannett85

答えて

2

のこの種をachiveする方法

オブジェクト上の点。原点、または(1000、0.0023、97.5)のような任意のランダムな値にすることができます。あなたのケースでは、追加の翻訳が必要な場合があります。たとえば、オブジェクトが原点で定義されていて、ユーザーが(x1、y1、z1)に配置していて、それを(x、y、z)の周りに回転させたい場合は、次のように追加する必要があります。

translate (x1,y1,z1); 

翻訳後(x、y、z)。

+0

これは依然として私の問題を解決していません。私は何をしていますか?ユーザーがマウスを左右に動かすと、 "posX"変数を増減します。ユーザーがマウスを上下に動かすと、 "posY"変数が増減します。ユーザーがマウスをドラッグすると、私はオブジェクトを回転させます。私の翻訳はマウスの動きに常に対応する必要があります。左/右の動きのコントロールはXの値と上下のYの値を制御します。しかし、(posX、posY、posZ )これはdoesnt仕事。 –

関連する問題