У меня проблема при рендеринге кубов в OpenGL. Я рисую два куба, один из которых является проводным и центрирован вокруг источника, а другой смещен относительно источника и является сплошным.Я сопоставил некоторые клавиши, чтобы повернуть объекты на несколько градусов относительно начала координат, чтобы вся сцена могла вращаться вокруг начала координат.
Проблема заключается в том, что при рендеринге сцены предполагается, что проволочный кубнаходиться перед другим сплошным кубом, он не отображается правильно.
На изображении выше цветной куб должен находиться позади проволочного куба.т.е. зеленый проводной куб должен быть сверху.
Также куб не работает должным образом.
После того, как я немного поверну его вокруг оси x (текущая горизонтальная линия).
У куба отсутствуют грани, и он неправильно рендерится.Что я делаю не так?
Я кодировал следующее примечание: rotateX, rotateY, rotateZ отображаются на ключи и являются моими глобальными переменными вращения.
//The Initialize function, called once:
void Init(){
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Depth Buffer Setup // Enables Depth Testing
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glEnable(GL_LIGHTING);
}
void draw(){
//The main draw function
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45, 640/480.0, .5, 100);
glMatrixMode(GL_MODELVIEW); //select the modelview matrix.
glLoadIdentity ();
gluLookAt(0,0,5,
0,0,0,
0,1,0);
glRotatef(rotateX,1,0,0);
glRotatef(rotateY,0,1,0);
glRotatef(rotateZ,0,0,1);
drawScene(); // this just draws the main axis lines,
glutWireCube(1);
glPopMatrix();
glPushMatrix();
glTranslatef(-2,1,0);
drawNiceCube();
glPopMatrix();
glutSwapBuffers();
}
Код для drawNiceCube() просто использует GL_QUADS, в то время как drawWireCube встроен в GLUT.
РЕДАКТИРОВАТЬ: Я разместил полный код на http://pastebin.com/p1kwPjEM, извините, если он не задокументирован.