Вращение и перемещение в относительный центр в OpenGL - PullRequest
1 голос
/ 15 ноября 2011

У меня есть простая модель, которую я хочу повернуть на 360 ° и переместиться в новом направлении. Моя проблема в том, что я перевожу модель, потому что она вращается в (0,0,0), а не в ее собственном центре. Это мой код:

void Car::move(void){
    if (car_direction > TWO_PI) 
        car_direction -= TWO_PI;
    else
        car_direction += TWO_PI;

    car_x_pos = sin(car_direction)*incMov;
    car_z_pos = cos(car_direction)*incMov;

    glPushMatrix();
        glTranslatef(car_x_pos, car_y_pos, car_z_pos);
        glRotatef(RAD_TO_DEG * car_direction, 0, 1, 0);
        drawCar();
    glPopMatrix();
}

** EDIT

Я нашел проблему, я неправильно вычислял x и z, правильный код:

void Car::move(void){
if (car_direction > TWO_PI) 
    car_direction -= TWO_PI;
else
    car_direction += TWO_PI;

car_z_pos += incMov * cos(car_direction); //correct calculation
car_x_pos += incMov * sin(car_direction); //correct calculation


glPushMatrix();
    glTranslatef(car_x_pos, car_y_pos, car_z_pos);
    glRotatef(RAD_TO_DEG * car_direction, 0, 1, 0);
    drawCar();
glPopMatrix();

}

Теперь машина может вращаться и двигаться без проблем.

1 Ответ

0 голосов
/ 15 ноября 2011

Я думаю, что у вас есть ваш заказ в обратном направлении. Попробуйте сначала вызвать Rotate, а затем Translate.

...