我们知道,在opengl中,如果模型中点不在原点,先平移后旋转会导致模型的位移发生变化。但在项目中遇到这么一个问题,如果不知道模型中点,或者知道模型中点一定不在原点,但我们也只需要模型方向,那么我们直接将模型旋转会得到我们想要的方向吗?即如果先平移后旋转能不能得到想要的方向?
这个地方我疑惑了很久,因为轴只有方向没有位置,默认的旋转会朝着原点计算,当时的想法是不能,想着可能整个模型会绕着原点旋转,相当于位移了,而本身形状不会变化,但结果显然是错的。
首先做了一个demo,一个中心在原点的正方形(灰色)先绕z轴旋转30度,再沿x轴平移0.5个单位(红色),另一个正方形则相反(蓝色):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//原图
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBegin(GL_QUADS);
glColor3f(0.5,0.0,0.0);
glVertex3f(-0.1,0.1,0.0);
glVertex3f(0.1,0.1,0.0);
glVertex3f(0.1,-0.1,0);
glVertex3f(-0.1,-0.1,0);
glEnd();
//先旋转再平移
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.5,0.0,0.0);
glRotatef(30.0,0.0,0.0,1.0);
glBegin(GL_QUADS);
glC