OpenGl: проблема буфера трафарета (стена + окно)? - PullRequest
1 голос
/ 13 мая 2010

Я хочу создать стену с окном внутри, используя буфер трафарета. Мой код выглядит так:

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);

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

Ответы [ 2 ]

1 голос
/ 01 мая 2011

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

glStencilFunc(GL_NOTEQUAL, 1, 1);

до

glStencilFunc(GL_EQUAL, 1, 1);
1 голос
/ 13 мая 2010

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

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

Вот еще один пример с использованием необработанного Win32. Бит PIXELFORMATDESCRIPTOR является важной частью.

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

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

...