Preciso desenhar contornos em torno de objetos 2D no espaço 3D. Tentei desenhar linhas ao redor do objeto (+ pontos para preencher a lacuna), mas devido à largura da linha, parte dela (~ 50%) estava cobrindo o objeto. Tentei usar o buffer de estêncil para eliminar esse problema, mas fiquei sth assim (o contorno é verde):
http://goo.gl/OI5uc (desculpe, não posso postar imagens, devido à minha reputação)
Você pode ver (onde a seta aponta) que algumas partes da linha estão atrás do objeto e outras estão acima. Isso muda quando movo a câmera, mas sempre há uma parte que está cobrindo. Aqui está o código que eu uso para desenhar objetos:
glColorMask(1,1,1,1);
std::list<CObjectOnScene*>::iterator objIter=ptr->objects.begin(),objEnd=ptr->objects.end();
int countStencilBit=1;
while(objIter!=objEnd)
{
glColorMask(1,1,1,1);
glStencilFunc(GL_ALWAYS,countStencilBit,countStencilBit);
glStencilOp(GL_REPLACE,GL_KEEP,GL_REPLACE );
(*objIter)->DrawYourVertices();
glStencilFunc(GL_NOTEQUAL,countStencilBit,countStencilBit);
glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
(*objIter)->DrawYourBorder();
++objIter;
++countStencilBit;
}
Eu tentei diferentes configurações do buffer de estêncil, mas sempre estava ficando sth assim. Aqui está a pergunta: 1. Estou definindo o buffer de estêncil errado?
2. Existem outras maneiras simples de criar contorno em tais objetos?
Desde já, obrigado.
EDITAR:
1. Eu não tenho normais de objetos.
2. O objeto pode ser côncavo.
3. Não consigo usar shaders (veja abaixo o porquê).