ここで、回転と平行移動の後で長方形を長方形のままにできるかどうか疑問に思っています。私の例は次のようにリストされています:
元の長方形の4つのコーナーポイントは、s1(-1,-1,2)、s2(-1,1,2)、s3(1,1,2)、s4(1、-1,2)です。
私の変換全体は平行移動と回転であるため、glTranslateとglRotateを使用して変換行列を取得します。
GLfloat modelView[16]; //transform the rectangle
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
//because of column-major order, here should be rotation first and then translation
glRotatef(-rotationAngel, rotationVector[0], rotationVector[1], rotationVector[2]);
glTranslatef(tranV[0], tranV[1], tranV[2]);
glGetFloatv(GL_MODELVIEW_MATRIX, modelView);
glPopMatrix();
私の実際のプログラムでは、rotationAngel = 62、rotationVector =(-0.34、0.81、0)、tranV =(0.46、1.70、0.059);
次に、行列 "modeViewを使用して、結果の長方形の4つのコーナーポイントを計算します。
sp1.x = s1.x*modelView[0] + s1.y*modelView[4] + s1.z*modelView[8] + modelView[12];
sp1.y = s1.x*modelView[1] + s1.y*modelView[5] + s1.z*modelView[9] + modelView[13];
sp1.z = s1.x*modelView[2] + s1.y*modelView[6] + s1.z*modelView[10] + modelView[14];
他の3つのsp2sp3sp4も同じ方法で計算されます。
ただし、結果は混乱を招きます。それらはもはや長方形ではありません。
sp1 = (-2.10, -0.038, 0.77);
sp2 = (-2.48, 1.88, 1.45);
sp3 = (-1.38, 1.50, 3.08);
sp4 = (-1.01, -0.34, 2.39);
明らかに、OpenGLでそれらを描画した後、4つのコーナーポイントは長方形を作成できません。
だから私はなぜ知りたいですか?平行移動と回転では、長方形が変更できないことを保証できませんか?そして、これらの変換後、長方形を長方形のままにする方法は?