2010-05-12 3 views
1

Я хочу создать стену с окном внутри, используя буфер трафарета. Мой код выглядит следующим образом:OpenGl: проблема с буфером трафарета (Wall + Window)?

glEnable(GL_STENCIL_TEST); 
glClearStencil(0); 
glClear(GL_STENCIL_BUFFER_BIT); 
glStencilMask(1); 
glStencilFunc(GL_ALWAYS, 1, 1); 

glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); 
glDisable(GL_DEPTH_TEST); 
glColor3f(1,1,1); 

//Window 
glBegin(GL_POLYGON); 
glVertex3d(-5,0,-20); 
glVertex3d(-5,0,40); 
glVertex3d(-20,0,40); 
glVertex3d(-20,0,-20); 
glEnd(); 

glEnable(GL_DEPTH_TEST); 
glStencilFunc(GL_NOTEQUAL, 1, 1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 

glEnable(GL_CLIP_PLANE0);      
glClipPlane(GL_CLIP_PLANE0, eqr); 
glBindTexture(GL_TEXTURE_2D,texture[1]); 
glBegin(GL_POLYGON); 
glNormal3f(0.0f,-1.0,0.0f); 

//Wall 
glTexCoord2f(0.0f, 0.0f);glVertex3d(20,0,-20); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(20,0,40); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,40); 
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,-20); 

glEnd(); 
glDisable(GL_STENCIL_TEST); 

Но это не работает, я получил всю стену без заполнения окна в нем, какие-либо предложения ??

ответ

1

Убедитесь, что вы запросили контекст OpenGL с буфером трафарета из вашей оконной системы. Вы не можете получить его по умолчанию, если только вы его не попросите.

example с использованием GLUT. Вы захотите посмотреть вызов glutInitDisplayMode().

Другой код: example Использование raw Win32. Важнейшей частью является бит PIXELFORMATDESCRIPTOR.

glXChooseVisual(), вероятно, вы хотите посмотреть, используете ли вы X11.

Я бы рекомендовал SDL, если вы хотите межплатформенное управление контекстом.

1

Я не проверял код, но я думаю, что вы должны изменить

glStencilFunc(GL_NOTEQUAL, 1, 1); 

в

glStencilFunc(GL_EQUAL, 1, 1); 
Смежные вопросы