Вероятно, причина, по которой вы полагаете, что ваша камера движется, а не ваша модель, в том, что все объекты на сцене движутся вместе?
После рендеринга вашей модели и перед рендерингом других объектов вы сбрасываете матрицу MODELVIEW? Другими словами, вы делаете другой glLoadIdentity () или glPopMatrix () после рендеринга модели, о которой вы говорите, и перед рендерингом других объектов?
Потому что если нет, то любые преобразования, которые вы применили к этой модели, будут также применяться к другим визуализированным объектам, и все будет так, как если бы вы вращали весь мир (или камеру).
Я думаю, что с вашим кодом может быть другая проблема:
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
Вы пытаетесь повернуть модель вокруг точки (0, 0, -zoom)?
Обычно, чтобы вращаться вокруг определенной точки (x, y, z), вы делаете:
- Перевести (x, y, z) в начало координат (0,0,0), переведя вектором (-x, -y, -z)
- Выполнение поворотов
- Переведите начало координат в (x, y, z), переведя вектором (x, y, z)
- Draw
Если вы пытаетесь вращаться вокруг точки (0,0, увеличение), вы пропускаете шаг 3.
Поэтому попробуйте добавить это, прежде чем рендерить вашу модель:
glTranslatef(0.0f, 0, zoom); // translate back from origin
С другой стороны, если вы пытаетесь повернуть модель вокруг начала координат (0,0,0), а также переместите ее вдоль оси z, то вы захотите, чтобы ваш перевод пришел после вращения, как @ сказал не виртуал.
И не забудьте сбросить матрицу MODELVIEW, прежде чем рисовать другие объекты. Таким образом, вся последовательность будет выглядеть примерно так:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
#if you want to rotate around (0, 0, -zoom):
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, zoom); // translate back from origin
#else if you want to rotate around (0, 0, 0):
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, -zoom);
#endif
//Here model render :/
glLoadIdentity();
// translate/rotate for other objects if necessary
// draw other objects