Сам его три дня назад начал изучать, Поэтому возможно ошибаюсь, НО:
В книге краснова, например рисуется изображение дырки. То есть я так понял, происходит сперва заполнение трафарета, и уже после рисование.
Но там у него не очень понятно - использовать можно, благо он даёт исходники, но вот разобратся очень сложно.
А вот позавчера нашёл интересную статью Вот ссылка
"
http://citforum.proc.ru/programming/opengl/opengl_04.shtml"
сейчас её подробнейше изучаю - там очень подробно и детально изложен алгоритм.
Вот что я понял:
(там куб и сфера)
сперва рисуем - заполняем трафарет на +1 там где рисуем.
glStencilFunc(GL_ALWAYS, 1, 0);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
auxSolidCube(2.5);
Хотя возможно тут я ошибаюсь, но как понимаю данную команду, она рисует примитив, и где рисует, заполняет на +1.
Потом ещё также. И местами изменяем это благообразие ещё на +1.
потом очищаем буферы все, кроме трафарета (имеем дырявую фигуру, т.е заполненую разными значениями).
Потом запрещаем буфер трафарета(не очищаем) и рисуем.
потом включаем трафарет и рсуем дырявую фигуру.
// разрешаем тест трафарета и рисуем дырявый куб
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_EQUAL, 1, 255);
glColor3d(1,1,1);
auxSolidCube(2.5);
Я признаюсь, пробовал только красновскую версию.
Так или примерно так было написано в различных найденых мной исходниках.
Получается, если в буфере глубины есть изображение етой фигуры, то мы можем рисовать и за ней (я так понял, что буфер глубины не заполняется, ведь изображение там не рисуется). Правда буфер глубины, как я понимаю проверяет все пикселы экрана, а не фигуры, но вот для этой фигуры и будем его включать.
или воти чёто тут интересное нашёл
->
http://opengl.org.ru/books/open_gl/chapter4.12.html