C++ 为什么从原点开始旋转

C++ 为什么从原点开始旋转,c++,opengl,C++,Opengl,我面临一个旋转问题,一个用opengl绘图原语绘制的三角形。我正在使用glut键功能通过按E和R键逆时针和顺时针旋转三角形。然后还可以使用glut特殊键功能通过按向上向下向左向右这样的键来平移三角形x轴和y轴 但在将这个三角形平移到另一个位置后,而不是按旋转键,它不是旋转的形式,而是它停留的最后一个位置。这是如何从原点中心旋转的问题。 我不知道我做错了什么 代码: #包括 #包括 #包括 使用名称空间std; 浮动位置x=0.0f; 浮动位置Y=0.0f; 浮动移动这=0.1f; 浮动角度=

我面临一个旋转问题,一个用opengl绘图原语绘制的三角形。我正在使用glut键功能通过按
E
R
键逆时针和顺时针旋转三角形。然后还可以使用glut特殊键功能通过按
向上
向下
向左
向右
这样的键来平移三角形x轴和y轴

但在将这个三角形平移到另一个位置后,而不是按旋转键,它不是旋转的形式,而是它停留的最后一个位置。这是如何从原点中心旋转的问题。

我不知道我做错了什么

代码:

#包括
#包括
#包括
使用名称空间std;
浮动位置x=0.0f;
浮动位置Y=0.0f;
浮动移动这=0.1f;
浮动角度=0.0f;
void init(void){
glClearColor(0.0f、0.0f、0.0f、0.0f);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-1.0,1.0,-1.0,1.0,1.0,-1.0);
}
void drawFigure(){
gl点大小(4);
GL3F(1.0f,1.0f,0.0f);
glBegin(GL_行);
//共4个留置权9个顶点
glVertex2f(0.1f,0.0f);
glVertex2f(-0.1f,0.0f);
glVertex2f(0.0f,0.1f);
glVertex2f(-0.1f,0.0f);
glVertex2f(0.0f,0.1f);
glVertex2f(0.1f,0.0f);
GL3F(0.0f,1.0f,0.0f);
glVertex2f(0.0f,0.1f);
glVertex2f(0.0f,0.0f);
格伦德();
glBegin(总分);
GL3F(0.0f、0.0f、1.0f);
glVertex2f(0.0f,0.1f);
GL3F(1.0f,0.0f,0.0f);
glVertex2f(0.0f,0.0f);
格伦德();
}
无效特殊键(int键、int xpo、int ypo){
if(key==GLUT\u key\u UP){
posY=posY+movethis;
}
else if(key==GLUT\u key\u DOWN){
posY=posY-movethis;
}
else if(key==GLUT\u key\u RIGHT){
posX=posX+movethis;
}
else if(key==GLUT\u key\u LEFT){
posX=posX-movethis;
}
再发现();
}
void KeysFun(无符号字符键、int xpos、int ypos){
如果(键=='e'| |键=='e'){
角度=角度+10;
}
else if(key='r'| | key='r'){
角度=角度-10;
}
再发现();
}
无效显示(){
glClear(GLU颜色缓冲位);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glRotatef(角度,0.0f,0.0f,1.0f);
glTranslatef(posX,posY,0.0f);
drawFigure();
glFlush();
}
int main(int argc,字符**argv){
glutInit(&argc,argv);
glutInitWindowSize(600600);
位置(450,50);
创建窗口(“框架”);
init();
glutDisplayFunc(显示器);
glutSpecialFunc(和SpecialKeys);
glutKeyboardFunc(&KeyFun);
glutMainLoop();
返回退出成功;
}

您必须“向后”读取矩阵乘法链中的运算顺序。首先必须旋转,然后平移,但如果按

rotate
translate
vertices

数据“向上”移动,因此顶点“看到”首先是平移,然后是旋转。解决方案:翻转旋转和平移的顺序。

我最近回答了一个问题,我认为这个问题与您遇到的问题相同:(另外,请阅读有关编辑内容的注释)@aslg我看到了答案,但这不是明确的答案。你需要在平移后放置旋转。如果你真的想使用像OpenGL这样的低级图形API,学习矩阵变换的数学知识将对你有好处。特别是:所有基本变换矩阵都是围绕原点进行操作的,但您可以将矩阵相乘以创建更复杂的变换。你和那个问题上的人是同一个人,只是在不同的账户下。我仍然认为我的答案相当明确。你应该用谷歌搜索向量。
rotate
translate
vertices