Я пытаюсь нарисовать сферу и куб одновременно на моем экране. Но цвета моего куба (который рисуется первым) исчезают. Я не понимаю, почему.Цвета исчезают после рисования изображения
сфера справа в порядке. Но мой куб слева - нет. я добавил текстуру как:
Я прекрасно рисовать их обоих по отдельности, но когда я пытаюсь сделать их обоих на одном виджете что-то пойдет не так. Я решила, что это будет проблема, но это не так.
код:
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();
}
Не должно быть 'glEnd()' когда вы закончите рисовать свой куб? –
Я забыл скопировать часть thaat. here u go – LandonZeKepitelOfGreytBritn
Я рекомендую не очищать буфер глубины и цвета внутри метода drawCube, потому что, как только вы измените порядок, он больше не будет работать. Обратите внимание, что 'glBegin (...) ... glEnd (...)' is ** устарело ** для изучения, это отлично, но для некоторых RealWorldApplications вы хотите рассмотреть объект буфера вершин. Также все операции с матрицей 'glTranslatef() glPushMatrix() glPopMatrix() ...' устарели. В новых версиях OpenGL вас попросят сделать все умножения Matrix самостоятельно. – xuma202