首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要从圆心原点旋转

为什么要从圆心原点旋转
EN

Stack Overflow用户
提问于 2016-03-23 06:23:16
回答 1查看 117关注 0票数 4

我面临着一个旋转问题,一个用opengl绘图图元绘制的三角形。我正在使用glut键功能,通过按ER键来逆时针和顺时针旋转三角形。然后使用glut特殊键功能通过按up down left right键来平移三角形的x轴和y轴,如下所示

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

我不知道我做错了什么。

代码:

代码语言:javascript
复制
#include<iostream>
#include <cstdlib>
#include<GL\freeglut.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, 0.0f);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1.0, 1.0, -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.0f);
    glVertex2f(0.0f, 0.1f);
    glVertex2f(0.1f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex2f(0.0f, 0.1f);
    glVertex2f(0.0f, 0.0f);

    glEnd();

    glBegin(GL_POINTS);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex2f(0.0f, 0.1f);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex2f(0.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 xpos, 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, 0.0f, 0.0f, 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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-03-23 23:51:14

你必须“倒着”阅读矩阵乘法链中的操作顺序。你首先需要旋转,然后平移,但是如果你写成

代码语言:javascript
复制
rotate
translate
vertices

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36166372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档