Я работаю над объектной моделью, но кажется, что что-то не так. Это то, что я получаю, когда я рисую чайник:Ошибка чертежа OpenGL для чайника
Как вы можете видеть, фоновые объекты появляются на переднем плане, как кольца в верхней части. Я работаю над всем, что я могу изменить, например, плоскостью отсечения и буфером глубины, но я просто не могу заставить модель выглядеть твердой. У меня есть возможность включения глубины, а также очистка буфера глубины и цветового буфера. Я не могу сказать, что случилось.
Вот мой код листинга:
void displayLighting() {
if (specular)
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
else
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_FRONT, GL_SHININESS, shininess);
lightPos[0] = lightDist*sinf(lightAngle);
lightPos[1] = lightDist;
lightPos[2] = lightDist*cosf(lightAngle);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
}
void drawTeapot() {
float diffuseMaterial[] = { 1.f, 1.f, 1.f };
glTranslatef(0.f, -0.f, -0.f);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMaterial);
glutSolidTeapot(20.0f);
}
void renderScene(void) {
glClearColor(0.f,0.f,0.f,1.f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(zDist*(sinf(yAngle)),zDist*(sinf(xAngle)),zDist*(cosf(xAngle))*(cosf(yAngle)),0,0,0,0,1,0);
displayLighting();
drawTeapot();
glutSwapBuffers();
}
void changeSize(int width, int height) {
float ratio;
ratio = w * 1.0f/h;
glMatrixMode(GL_PROJECTION);
glViewport(0, 0, w, h);
glLoadIdentity();
gluPerspective(45.0f, ratio, 100.0f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv) {
// init GLUT and create window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(0,0);
glutInitWindowSize(800,600);
glutCreateWindow("Teapot");
initLighting();
glutDisplayFunc(renderScene);
glutReshapeFunc(changeSize);
glutIdleFunc(renderScene);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glutMainLoop();
}
Я уверен, что это легко исправить, но я надеюсь, что вы, ребята могут помочь.
На первый взгляд этот код выглядит хорошо. Можете ли вы добавить код для 'displayLighting()' и 'drawTeapot()'? – user1781290
похоже, что не проводится никаких испытаний глубины –
Пожалуйста, см. Правки, спасибо, что следите за мной, я все еще озадачен ... –