Pergunta

Quero criar estêncil em alguns objetos com openGL.

glClear(GL_STENCIL_BUFFER_BIT);
glColorMask(false, false, false, false);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_EQUAL, 0, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glDisable(GL_DEPTH_TEST);
glColor4f(0,0,1,1.0f);

gl::draw(mVBO); //a sphere

glEnable(GL_DEPTH_TEST);
glColorMask(true, true, true, true);
glStencilFunc(GL_ALWAYS,0, 1);
glStencilOp(GL_REPLACE,GL_KEEP, GL_ZERO);

mTexture.enableAndBind();
gl::drawCube(Vec3f(0,3,0),Vec3f(13,13,13) );

glDisable(GL_STENCIL_TEST)

Tentei tantas horas conseguir uma operação booleana simples, mas não consegui.

Eu quero algo assim:

img

Foi útil?

Solução

Eu recomendaria não reinventar a roda.

Outras dicas

O buffer de estêncil do OpenGL opera na grade de pixels bidimensional do buffer de quadro.O próprio OpenGL não tem noção de objetos ou cena.É apenas desenhar pontos, linhas e triângulos.Portanto, um CSG real não é possível apenas com OpenGL.No entanto, existem técnicas que emulam CSG com operações de buffer de estêncil, mas são bastante complexas.Pesquise no Google "OpenGL CSG no buffer de estêncil" para encontrar alguns artigos de meados da década de 1990 sobre o assunto.

Experimente a biblioteca sgCore - http://www.geometros.com/sgcore/review.htmBiblioteca muito robusta e poderosa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top