2012-04-04 22 views
0

私はOpenGL(C++)で矩形を回転させて管理しています。私は、 "分離された軸の定理"を使用して、衝突のための2つの矩形をテストするプログラムを作成しています。定理を使用するには、矩形の各コーナーのx座標とy座標が必要ですが、私の問題は、glRotatef(...)と呼んでも、矩形の角の座標は回転された値に変更されず、矩形は必要に応じて回転します。 glRotatefが呼び出された後、どのように私の四角形の座標を更新できますか?座標位置が更新されていませんか?

コード:

// float r1.x[4] and r1.y[4] hold the x and y position of each of the 4 corners, starting with the upper left (r1.x[0], r1.y[0]) 
    glLoadIdentity(); 
    glTranslatef((r1.x[0] + r1.x[2])/2, (r1.y[1] + r1.y[3])/2, 0); // Translates matrix to center of rectangle 
    glRotatef(r1.angle, 0, 0, 1); 
    glTranslatef(-((r1.x[0] + r1.x[2])/2), -((r1.y[1] + r1.y[3])/2), 0); // Translates back 
    r1.angle++; 

    glBegin(GL_QUADS); 
     glVertex2f(r1.x[0], r1.y[0]); 
     glVertex2f(r1.x[1], r1.y[1]); 
     glVertex2f(r1.x[2], r1.y[2]); 
     glVertex2f(r1.x[3], r1.y[3]); 
    glEnd(); 

答えて

2

変換を使用すると、画面上に描画されたばかりの前に提供ポイントを掛けます内部変換行列を更新(glTranslatefglRotatefのような)OpenGLで呼び出します。 OpenGLはあなたのデータに全く触れません。

一般的に、これはあなたが望むものです。あなたは時間的に一定のモデルを持っていますが、それは周りに変換されます。

、あなたのデータを更新する必要がないただし場合は、手動で、独自の変換マトリクスを作成し、それを乗算して、(glLoadIdentityで)きれいな変換行列を描画する必要がある

あなたは少しを得ることができますあなたはOpenGLから変換マトリックスを得ることができるので、OpenGLから助けてください、しかし私はこれをお勧めしません。数学はそれほど難しくないし、それをやる方法を学ぶことに感謝します。

関連する問題