Я нашел пример программы о том, как избежать блокировки карданного подвеса:
http://www.mfwweb.com/OpenGL/Special_Rotations/Source.c
У меня вопрос: как должна выглядеть функция void Render_Scene(void)
, если в векторе или списке есть несколько объектов? Я использовал фрагмент этого кода в моей программе, но вращение не работает. Я знаю, что есть некоторые проблемы с матрицами. Вот моя функция paintGL () (я использую qt):
void GLBox::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
double *trans;
double *rot;
double *matrix;
double ang;
double **vertexes;
//camera
glTranslated(xTrans, yTrans, zTrans);
glRotated(xRot, 1, 0, 0);
glRotated(yRot, 0, 1, 0);
glRotated(zRot, 0, 0, 1);
for(unsigned int i = 0; i < vector_objects.size(); i++)
{
glPushMatrix();
trans = (*vector_objects[i]).getTranslation();
rot = (*vector_objects[i]).getRotation();
matrix = (*vector_objects[i]).getMatrixRotation();
vertexes = (*vector_objects[i]).getVertexes_coordinates();
ang = (*vector_objects[i]).getAngle();
glTranslated(trans[0], trans[1], trans[2]);
if (ang != 0.0)
{
//glLoadIdentity ();
glRotatef (ang, rot[0], rot[1], rot[2]);
glMultMatrixd(matrix);
glGetDoublev(GL_MODELVIEW_MATRIX, matrix);
}
glMultMatrixd(matrix);
//drawing
for(int j = 0; j < (*vector_objects[i]).getNumber_of_vertexes(); j += 3)
{
glBegin(GL_TRIANGLES);
glVertex3dv( vertexes[j]);
glVertex3dv( vertexes[j + 1]);
glVertex3dv( vertexes[j + 2]);
glEnd();
}
glPopMatrix();
}
glFlush();
}
Может быть, вы знаете, как решить эту проблему? Спасибо за помощь