Ich muss Konturen um 2D-Objekte im 3D-Raum zeichnen. Ich habe versucht, Linien um das Objekt zu zeichnen (+ Punkte, um die Lücke zu füllen), aber aufgrund der Linienbreite bedeckte ein Teil davon (~ 50%) das Objekt. Ich habe versucht, Schablonenpuffer zu verwenden, um dieses Problem zu beseitigen, aber ich habe etw wie folgt erhalten (Kontur ist grün):
http://goo.gl/OI5uc (Entschuldigung, ich kann aufgrund meines Rufs keine Bilder posten)
Sie können sehen (wo der Pfeil zeigt), dass sich einige Teile der Linie hinter dem Objekt befinden und einige darüber. Dies ändert sich, wenn ich die Kamera bewege, aber es gibt immer einen Teil, der sie abdeckt. Hier ist Code, den ich zum Zeichnen von Objekten verwende:
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;
}
Ich habe verschiedene Einstellungen des Schablonenpuffers ausprobiert, aber immer habe ich so etwas bekommen. Hier ist die Frage: 1. Bin ich falsch eingestellt Schablonenpuffer?
2. Gibt es andere einfache Möglichkeiten, um Konturen auf solchen Objekten zu erstellen?
Danke im Voraus.
BEARBEITEN:
1. Ich habe keine Normalen von Objekten.
2. Objekt kann konkav sein.
3. Ich kann keine Shader verwenden (siehe unten, warum).