Алгоритм использования трафаретного буфера
После отсечения плоскостью части трехмерной модели буквы C получаем отверстие, в которой видим внутреннюю часть модели. Механизм трафаретного буфера позволит заполнить эту область частью плоскости.
Буфер трафарета - это двумерная матрица, в которой каждый элемент соответствует пикселю области рендеринга. Каждый элемент этой матрицы занимает 2 байта. В каждый элемент этой матрицы может быть записано число от 0 до 255. Буфер трафарета используется для создания маски, которая может быть использована для дополнительных возможностей рендеринга. Рассмотрим механизм, который используется для заполнения отверстия фрагментом плоскости.
1 Шаг: Заполнение трафаретного буффера. Заполним, например, пятерками те элементы буфера трафарета, которые соответствуют пикселам, где отображается модель буквы "C".
Для работы с буфером трафарета в OpenGL предусмотрены специальные функции, которые позволяют его гибко использовать. В коде программы их использование описано.
Пятерки запишутся во все элементы матрицы буфера трафаретов, который соответсвуют всем пикселам отображаемой модели.
Красный цвет на данном рисунке показывает, в какой области буфер трафарета заполнен пятерками

2 шаг. Заполнение трафаретного буффера двойками в тех областях, где видны только лицевые стороны полигонов.
Модель построена таким образом, что лицевая сторона всех полигонов обращена наружу. Поэтому, если отключим отображение полигонов, которые обращены к нам задней стороной, получим следующую ситуацию:

В области трафаретного буфера, где видны лицевые стороны полигонов заносим значения, отличные от пятерок, например двойки.
Если в буффере трафарета обозначим области, куда теперь занесены двойки, синим цветом, то получим следующую ситуацию:

Теперь область трафарета, где лежат пятерки (на рисунке обозначена красным цветом) представляет собой область, где видимы полигоны, обращенные к нам тыльной стороной. Именно в этом участке и будет отображаться фрагмент плоскости, который будет закрывать отверстие.
3 Шаг врисовка фрагмента плоскости. Теперь нужно нарисовать плоскость только в той области экрана, где соответствующие элементы матрицы буфера трафарета равны пятерке. Получим следующую ситуацию:

Таким образом, с помощью трафаретного буфера в требуемую область был врисован фрагмент плоскости


