Мой код до сих порOpenGL, как вращать объекты независимо друг от друга?
void display (void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity();
gluLookAt( camera[0][0], camera[0][1], camera[0][2],
camera[1][0], camera[1][1], camera[1][2],
camera[2][0], camera[2][1], camera[2][2] ); //Set the point looking at
glRotatef(cubeRot[0], 1.0f, 0.0f, 0.0f); //rotate on x axis
glRotatef(cubeRot[1], 0.0f, 1.0f, 0.0f); //rotate on y axis
glRotatef(cubeRot[2], 0.0f, 0.0f, 1.0f); //rotate on z axis
switch (Rendermode) { //different render mode
case 'f':
//Draw object I want to rotate
break;
case 'v':
//Draw object I want to rotate
break;
case 'e':
//Draw object I want to rotate
break;
glLoadIdentity();
}
//Draw object I DO NOT want to rotate
glutSwapBuffers (); // Swap The Buffers To Not Be Left With A Clear Screen
}
Однако на данный момент все мои объекты вращаются в то же время, как я могу повернуть объект я заметил, хочет повернуть, оставив те, которые я уже отметил не хотите повернуть еще?
Я поместил glPush и glPop вокруг чертежа объектов, которые я хотел повернуть, но другой объект по-прежнему вращается вместе с ними. Не могли бы вы оставить C & P мой код и поместить их в нужное место? – sam
Прямо сейчас я вижу 3 вызова 'glRotatef()' в вашем коде, которые принимают 'cubeRot' как аргумент. Если вы хотите выполнить каждый из них на отдельном объекте, не выполняйте эти вызовы одновременно, а наиболее определенно не до 'switch/case'. Оберните каждый вызов вокруг своей собственной операции push/pop вместе с вызовом метода для рисования этого конкретного объекта. – karlphillip
Кстати, удалите 'glLoadIdentity()' в конце 'switch'. В этом нет необходимости. – karlphillip