J'ai besoin de dessiner des contours autour d'objets 2D dans un espace 3D. J'ai essayé de dessiner des lignes autour de l'objet (+ points pour combler l'écart), mais en raison de la largeur de la ligne, une partie (~ 50%) couvrait l'objet. J'ai essayé d'utiliser le tampon de pochoir, pour éliminer ce problème, mais je suis arrivé comme ça (le contour est vert):
http://goo.gl/OI5uc (désolé, je ne peux pas publier d'images, en raison de ma réputation)
Vous pouvez voir (là où la flèche pointe), que certaines parties de la ligne sont derrière l'objet et d'autres au-dessus. Cela change lorsque je déplace la caméra, mais il y a toujours une partie qui la recouvre. Voici le code que j'utilise pour dessiner un objet:
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;
}
J'ai essayé différents paramètres de tampon de pochoir, mais je recevais toujours quelque chose comme ça. Voici la question: 1.Suis-je en train de définir un tampon de pochoir incorrect?
2. Existe-t-il d'autres moyens simples de créer des contours sur de tels objets?
Merci d'avance.
ÉDITER:
1. Je n'ai pas de normales d'objets.
2. L' objet peut être concave.
3. Je ne peux pas utiliser de shaders (voir ci-dessous pourquoi).
Réponses:
Pour plus de confort, essayez de dessiner la passe de contour sur une cible de rendu distincte et appliquez un petit flou, puis mélangez cette texture avec votre scène finale en utilisant les valeurs Z appropriées.
la source
Je vais faire ça comme ça:
Trier les objets dans l'ordre avant-arrière (distance de la caméra)
Dessinez la bordure de l'objet (sous forme de lignes et de points) avec désactivé
GL_DEPTH_TEST
Dessiner un objet avec activé
GL_DEPTH_TEST
Faites les deux dernières étapes pour chaque objet
Je vais essayer de faire ça comme ça, mais si quelqu'un a des idées de meilleure solution à ce problème (MIND CONCAVE OBJECTS, S'IL VOUS PLAÎT) - n'hésitez pas à partager avec nous.
PS. Je ne suis pas entièrement satisfait de mes états OpenGL qui changent de solution si souvent peuvent être nuisibles. Mais si personne ne peut m'aider avec les paramètres de tampon de pochoir, je suppose que c'est la seule façon pour moi.
la source