Мне нужно нарисовать контур вокруг 2D-объектов в 3D-пространстве. Я попытался нарисовать линии вокруг объекта (+ точки, чтобы заполнить зазор), но из-за ширины линии некоторая часть (~ 50%) покрывала объект. Я попытался использовать буфер трафарета, чтобы устранить эту проблему, но я получил что-то вроде этого (контур зеленый):
http://goo.gl/OI5uc (извините, я не могу публиковать изображения из-за своей репутации)
Вы можете видеть (где стрелка указывает), что некоторые части линии находятся позади объекта, а некоторые - выше. Это меняется, когда я двигаю камеру, но всегда есть какая-то часть, которая ее закрывает. Вот код, который я использую для рисования объекта:
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;
}
Я пробовал разные настройки буфера трафарета, но всегда получал вот так. Вот вопрос: 1. Я неправильно установил трафаретный буфер?
2. Существуют ли другие простые способы создания контура на таких объектах?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
1. У меня нет нормалей объектов.
2. Объект может быть вогнутым.
3. Я не могу использовать шейдеры (см. Ниже, почему).