Я хочу создать стену с окном внутри, с помощью буфера шаблонов. Мой код похож на это:
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);
Но это не удается, я получил целую стену заливки без окна в нем, каких-либо предложений??
Убедитесь, что вы запрашиваете контекст OpenGL с буфером трафарета из вашей оконной системы. Вы не можете получить его по умолчанию, если только не попросите об этом специально.
Вот пример с использованием GLUT . Вы захотите взглянуть на вызов glutInitDisplayMode ()
.
Вот еще один пример с использованием необработанного Win32. Бит PIXELFORMATDESCRIPTOR
является важной частью.
glXChooseVisual ()
- это, вероятно, то место, где вы захотите посмотреть, если вы используете X11.
Я бы порекомендовал SDL , если вам нужно межплатформенное управление контекстом.