2014-01-10 3 views
0

Основная функция:Дальше выведенный объект перед вблизи объекта (OpenGL)

int _tmain(int argc, char* argv[]) 
{ 
glutInit(&argc, argv); 
glutInitWindowSize (500, 500); 

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); 
glEnable(GL_DEPTH_TEST); 

glDepthFunc(GL_LESS); 
glutInitWindowPosition (700, 100); 
glutCreateWindow("Result"); 
glutDisplayFunc(display2); 
glutReshapeFunc(reshape2); 
glutMouseFunc(main_mouse); 
glutKeyboardFunc(keyboard); 
glutMainLoop(); 

return 0; 
} 

функция Display2:

void display2() 
{ 
glClearColor(1.0,1.0,1.0,1.0); 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); 

//Green square 
glColor3f(0.0,1.0,0.0); 
glBegin(GL_POLYGON); 
glVertex3f(0.5,0.5,-1.0); 
glVertex3f(0.5,1.5,-1.0); 
glVertex3f(1.5,1.5,-1.0); 
glVertex3f(1.5,0.5,-1.0); 
glEnd(); 

//Red square 
glColor3f(1.0,0.0,0.0); 
glBegin(GL_POLYGON); 
glVertex3f(0.0,0.0,-2.0); 
glVertex3f(0.0,1.0,-2.0); 
glVertex3f(1.0,1.0,-2.0); 
glVertex3f(1.0,0.0,-2.0); 
glEnd(); 

glutSwapBuffers(); 
} 

функция reshape2

void reshape2(int width, int height) 
{ 
glViewport(0,0,width,height); 

glMatrixMode(GL_PROJECTION); 

glOrtho(-3.0,3.0,-3.0,3.0,0.01,3.0); 
} 

У меня проблема с буфером глубины в OpenGL , Я пытаюсь нарисовать 2 квадрата красного и зеленого. Красный находится позади зеленого. Красный квадрат имеет значение z -2, а зеленый квадрат - значение z -1. Но красный квадрат, изображенный спереди зеленой площади. Я включил проверку глубины, но все еще не работает. Что не так с моей программой?

+0

Я не использовал GLUT, хорошо, но ... Я уверен, что вам нужно создать окно, прежде чем вы сможете начать устанавливать состояния GL. Создание окна обычно является точкой, в которой контекст создается и/или активируется ... таким образом, вы включили 'GL_DEPTH_TEST', прежде чем у вас даже появился контекст визуализации, в котором это делается. –

ответ

3

Не вызывайте никаких функций gl* перед тем, как позвонить по телефону glutCreateWindow, поэтому переместите glEnable и glDepthFunc после этого.

Каждую функцию gl выполняют вызовы контекста, который создается только в окне GLUT. До этого функции OpenGL не эффективны.

+0

Спасибо за помощь. – user2877976

Смежные вопросы