Соединение двух моделей в opengl

У меня есть две модели, каждая из которых хранится в отдельном VBO. Что я хочу сделать, это связать их так, чтобы вращение одного вращало другое, в то же время оставляя другое подключенным к первой модели. Теперь я использую три матрицы моделей: одну основную для всего объекта и одну для каждой из моделей, чтобы их можно было переводить по отношению к основной матрице. Однако, когда я делаю это, две модели отключаются, если я поворачиваю их. Как бы я связал две модели, чтобы они оставались связанными во время ротации или перевода?

2 ответа

Решение

Обычно вы делаете это так:

glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();

Конечно, если вы измените firstModelMatrix или же secondModelMatrixдве модели могут быть отключены. Но чем, это то, что вы намерены. Если вы хотите, чтобы они оставались на связи, измените только mainMatrix,

Однако обратите внимание, что эти матричные операции не рекомендуются. Тем не менее, вы должны быть в состоянии получить трюк из кода.

РЕДАКТИРОВАТЬ: Учитывая, что у вас есть голова и тело. Вы хотите вращать голову. Все дело в том, как вычисляется ваша матрица головы, особенно важно, в каком порядке вы применяете перевод и вращение. Я думаю, сейчас у вас есть что-то вроде этого:

HeadMatrix = Rotation * Translation

Но то, что вам нужно, это для того, чтобы держать голову на теле:

HeadMatrix = Translation * Rotation

У вас нет двух моделей. Все, что у вас есть, - это два буфера байтов, которые становятся геометрией только в сочетании с вызовом glDrawArrays или glDrawElements, который обращается к данным в буферах и интерпретирует их как треугольники.

OpenGL не знает, что такое "модель". OpenGL не поддерживает сцену или отношения между моделями. Это просто рисование точек, линий или треугольников в кадровом буфере, по одному за раз, без какого-либо воспоминания о том, какие другие точки, линии или треугольники были нарисованы ранее.

Если вы хотите сцену, вы должны поддерживать это самостоятельно.

Другие вопросы по тегам