2015-04-20 10 views
1

Я пытаюсь нарисовать сферу и куб одновременно на моем экране. Но цвета моего куба (который рисуется первым) исчезают. Я не понимаю, почему.Цвета исчезают после рисования изображения

сфера справа в порядке. Но мой куб слева - нет. я добавил текстуру как:

visualization

Я прекрасно рисовать их обоих по отдельности, но когда я пытаюсь сделать их обоих на одном виджете что-то пойдет не так. Я решила, что это будет проблема, но это не так.

код:

void MyGLWidget::drawCube() 
{ 

    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 

    gluLookAt(position,0.5,-0.1,-0.5,-0.5,0,0,0,1); 

    glTranslatef(0.5, 0, 0.0); 
    glRotatef(getCubeAngle(), 1.0f, 0.0f, 0.0f); 
    glTranslatef(0, 0, 0); 

    glDisable(GL_TEXTURE_GEN_S); 
    glDisable(GL_TEXTURE_GEN_T); 

    glPushMatrix(); 
    glBindTexture(GL_TEXTURE_2D, texture[0]); 
    glBegin(GL_QUADS); 
     //back 
     glTexCoord2f(0.0, 1.0); glVertex3f(-0.1, 0.1,-0.1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(0.1, 0.1,-0.1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(0.1,-0.1,-0.1); 
     glTexCoord2f(0.0, 0.0); glVertex3f(-0.1,-0.1,-0.1); 
    /*rest of cube gets drawn*/ 
     glEnd(); 
    glFlush(); 
    glPopMatrix(); 
} 

void MyGLWidget::drawSun() 
{ 
    glPushMatrix(); 
    glLoadIdentity(); 
    glBindTexture(GL_TEXTURE_2D, texturePlanet[0]); 

    glPushMatrix(); 
    glScalef(1,1,1); 
    glLoadIdentity(); 
    GLUquadricObj *quadric=gluNewQuadric(); 
    gluQuadricTexture(quadric, GLU_TRUE); 
    gluQuadricNormals(quadric, GLU_SMOOTH); 

    glEnable(GL_TEXTURE_2D); // 
    glBindTexture(GL_TEXTURE_2D,texturePlanet[0]);// 

    gluSphere(quadric, 0.25, 360,360); 
    glDisable(GL_TEXTURE_2D);// 

    gluDeleteQuadric(quadric); 
    glPopMatrix(); 

} 

void MyGLWidget::paintGL() 
{ 
    drawCube(); 
    drawSun(); 
} 
+0

Не должно быть 'glEnd()' когда вы закончите рисовать свой куб? –

+0

Я забыл скопировать часть thaat. here u go – LandonZeKepitelOfGreytBritn

+0

Я рекомендую не очищать буфер глубины и цвета внутри метода drawCube, потому что, как только вы измените порядок, он больше не будет работать. Обратите внимание, что 'glBegin (...) ... glEnd (...)' is ** устарело ** для изучения, это отлично, но для некоторых RealWorldApplications вы хотите рассмотреть объект буфера вершин. Также все операции с матрицей 'glTranslatef() glPushMatrix() glPopMatrix() ...' устарели. В новых версиях OpenGL вас попросят сделать все умножения Matrix самостоятельно. – xuma202

ответ

0

Это происходит потому, что в вашем кубе чертеже, вы не включили текстурирования.

glEnable(GL_TEXTURE_2D); //ADD THIS TO ENABLE TEXTURING 
glPushMatrix(); 
glBindTexture(GL_TEXTURE_2D, texture[0]); 
glBegin(GL_QUADS); 
     //back 
     glTexCoord2f(0.0, 1.0); glVertex3f(-0.1, 0.1,-0.1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(0.1, 0.1,-0.1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(0.1,-0.1,-0.1); 
     glTexCoord2f(0.0, 0.0); glVertex3f(-0.1,-0.1,-0.1); 
    /*rest of cube gets drawn*/ 
glEnd(); 
glFlush(); 
glPopMatrix(); 

glDisable(GL_TEXTURE_2D); // ADD THIS TO DISABLE TEXTURING 
Смежные вопросы