在这里,我想知道一个矩形是否可以在旋转和平移后保持矩形。我的例子如下:
原矩形的四个角点为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”来计算我的结果矩形的四个角点:
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];
其他三个 sp2 sp3 sp4 的计算方法相同。
然而,结果令人困惑。它们不再是矩形了。
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中画出来后,四个角点不能组成一个矩形。
所以我想知道为什么?平移和旋转不能保证矩形不变?以及如何在这些转换后使矩形保持矩形?