c – 为什么从中心原点旋转
发布时间:2020-12-16 06:51:30 所属栏目:百科 来源:网络整理
导读:我正面临一个旋转问题,一个用opengl绘图原语绘制的三角形.我正在使用过压键功能通过按下E和R键逆时针和顺时针旋转三角形.然后还使用过滤特殊键功能通过向上按下左右键来平移三角形x轴和y轴 但是在将这个三角形转换到另一个位置而不是按下旋转键之后,它不会从
我正面临一个旋转问题,一个用opengl绘图原语绘制的三角形.我正在使用过压键功能通过按下E和R键逆时针和顺时针旋转三角形.然后还使用过滤特殊键功能通过向上按下左右键来平移三角形x轴和y轴
但是在将这个三角形转换到另一个位置而不是按下旋转键之后,它不会从它停留的最后位置旋转.它从中心原点旋转如何解决这个问题. 我不知道我做错了什么. 码: #include<iostream> #include <cstdlib> #include<GLfreeglut.h> using namespace std; float posX = 0.0f; float posY = 0.0f; float movethis = 0.1f; float angle = 0.0f; void init(void) { glClearColor(0.0f,0.0f,0.0f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0,1.0,-1.0,-1.0); } void drawFigure() { glPointSize(4); glColor3f(1.0f,1.0f,0.0f); glBegin(GL_LINES); //Total 4 liens 9 vertex glVertex2f(0.1f,0.0f); glVertex2f(-0.1f,0.0f); glVertex2f(0.0f,0.1f); glVertex2f(-0.1f,0.1f); glVertex2f(0.1f,0.0f); glColor3f(0.0f,0.1f); glVertex2f(0.0f,0.0f); glEnd(); glBegin(GL_POINTS); glColor3f(0.0f,1.0f); glVertex2f(0.0f,0.1f); glColor3f(1.0f,0.0f); glEnd(); } void SpecialKeys(int key,int xpos,int ypos) { if (key == GLUT_KEY_UP) { posY = posY + movethis; } else if (key == GLUT_KEY_DOWN) { posY = posY - movethis; } else if (key == GLUT_KEY_RIGHT) { posX = posX + movethis; } else if (key == GLUT_KEY_LEFT) { posX = posX - movethis; } glutPostRedisplay(); } void KeysFun(unsigned char key,int ypos) { if (key == 'e' || key == 'E') { angle=angle+10; } else if (key == 'r' || key == 'R') { angle=angle-10; } glutPostRedisplay(); } void display() { glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(angle,1.0f); glTranslatef(posX,posY,0.0f); drawFigure(); glFlush(); } int main(int argc,char**argv) { glutInit(&argc,argv); glutInitWindowSize(600,600); glutInitWindowPosition(450,50); glutCreateWindow("Frame"); init(); glutDisplayFunc(display); glutSpecialFunc(&SpecialKeys); glutKeyboardFunc(&KeysFun); glutMainLoop(); return EXIT_SUCCESS; } 解决方法
您必须“向后”阅读矩阵乘法链中的运算顺序.首先必须旋转,然后翻译,但如果你把它写成
rotate translate vertices 数据“向上”移动,因此顶点首先“看到”平移,然后是旋转.解决方案:翻转旋转和平移的顺序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |