Использование glTranslate и glRotate для перемещения и вращения? - PullRequest
0 голосов
/ 11 октября 2010

Я пишу приложение, которое рисует 2D-треугольник и поворачивает его вокруг своей оси Z в зависимости от его положения.Его середина (t1.tx, t1.ty) постоянно изменяется при перетаскивании треугольника мышью.Проблема в том, что когда я перетаскиваю треугольник в другое место, вместо того чтобы оставаться там, где он и вращается, он вращается по кругу вокруг своей центральной точки.

Что я делаю не так?Я хочу, чтобы он вращался в своем положении.

void drawTriangle() {
    glBegin(GL_POLYGON);

    glColor3f((float)200/255, (float)200/255, (float)200/255);
    glVertex2f(t1.tx, t1.ty + .2); // top point of triangle
    glVertex2f(t1.tx - .2, t1.ty - .2); // left point
    glVertex2f(t1.tx + .2, t1.ty - .2); // right point

    glEnd();
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    glPushMatrix();
        glTranslatef(t1.tx, t1.ty, 0); // move matrix to triangle's current center point
        glRotatef(theta, 0, 0, 1.0); // rotate on z-axis
        drawTriangle();
    glPopMatrix();

    glutPostRedisplay();
    glutSwapBuffers();
}

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Я исправил это.Проблема заключалась в том, что я переводил матрицу, а затем рисовал на той матрице, которая была переведена.Что я сделал, так это нарисовал мой треугольник в центре матрицы, чтобы он все еще двигался и вращался в своем текущем положении по мере перевода матрицы.Спасибо за помощь.

1 голос
/ 11 октября 2010

С тех пор, как я это сделал, прошло некоторое время, но, исходя из того, что вы говорите, мое первое предположение - поменять местами порядок glTranslatef и glRotatef. Вы хотите вращаться в пространстве модели, а затем трансформироваться в мировое пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...