使用该glrotatef()功能可将图形相对于原点旋转指定的角度.如何在不使用转换矩阵的情况下相对于另一个点旋转相同的图形?谢谢!
void display(){
glClear(GL_COLOR_BUFFER_BIT);
gluOrtho2D(0,499,0,499);
glMatrixMode(GL_PROJECTION);
glColor3f(1,0,0);
drawhouse();
glFlush();
glColor3f(0,0,1);
glTranslatef(0.5 ,0.5,0.5);
glRotatef(45,1,1,1);
glTranslatef(-0.5 ,-0.5,-0.5);
drawhouse();
glFlush();
}
Run Code Online (Sandbox Code Playgroud)
这是发生了什么的屏幕截图.http://postimage.org/image/q81bhupw/
基本上:
如果要旋转P,翻译-P(以便P移动到原点),然后执行旋转,然后平移P(使原点移回P).
glTranslatef(P.x, P.y, P.z);
glRotatef(angle, A.x, A.y, A.z);
glTranslatef(-P.x, -P.y, -P.z);
Run Code Online (Sandbox Code Playgroud)
(注意:这是"反向顺序",因为添加的最后一个转换是在OpenGL规则下应用的第一个转换.)
因此,在您的设置代码中,您需要以下调用:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 499, 0, 499);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
然后你的display()方法应该是这样的:
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.5f, 0.5f, 0.5f);
glRotatef(45.f, 1.f, 1.f, 1.f);
glTranslatef(-0.5f, -0.5f, -0.5f);
glColor3f(0.f, 0.f, 1.f);
drawhouse();
glFlush();
}
Run Code Online (Sandbox Code Playgroud)