OpenGL: перевести объект в источник - PullRequest
3 голосов
/ 13 октября 2010

У меня есть модель автомобиля с различными частями автомобиля, описанными в группах вершин.

Ответы [ 3 ]

8 голосов
/ 13 октября 2010

Вы знаете текущую позицию шины, поэтому вы используете матрицу перевода, построенную из единичной матрицы и отрицательной позиции, чтобы перевести ее в начало координат:

1 0 0 -x
0 1 0 -y
0 0 1 -z
0 0 0  1

Затем поверните и примените прямое преобразованиеположить его обратно:

1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1
1 голос
/ 14 октября 2010

Возможно, вы захотите проверить glPushMatrix () и glPopMatrix ().glPushMatrix () сохранит все операции перевода / масштабирования / поворота, которые вы ранее использовали (т.е. вашу матрицу представления старой модели).Когда вы нажимаете на старую матрицу вида модели, вы будете работать в начале координат.Затем вы можете выполнять любые новые операции перевода / поворота / масштабирования того, что вы сейчас рисуете.Наконец, вы вызываете glPopMatrix ().Это перезагрузит вашу старую матрицу представления модели.Это самый простой и простой способ думать об этих операциях.

glPushMatrix();
// at this point you're working at the origin
// translate the tire here
// rotate the tire here
glPopMatrix();

В общем, это хороший способ позиционирования того, что вы рисуете.

0 голосов
/ 14 октября 2010

Вот код:

glTranslatef(x_translate_factor,y_translate_factor,z_translate_factor);
glRotatef(global_car_rotate,0,1,0) ;
glRotatef(global_tire_rotate,0,1,0);
glRotatef(tire_speed,1,0,0);

Где tyre_speed - скорость вращения шины, global_tire_rotate - это вращение шины относительно автомобиля. Global_car_rotate - это вращение автомобиля (и объектов с ним, таких как колесо) относительно оси z. * _translate_factor - это положение автомобиля внутри вашей сцены. У меня все работало нормально, надеюсь, у вас получится;).

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