в соответствии с книгами, которые я прочитал, проверка трафарета достигается путем сравнения эталонного значения со значением буфера трафарета, соответствующего пикселю, однако в одной из книг говорится, что:
A mask is bitwise AND-ed with the value in the stencil planes and with the reference value before the comparison is applied
здесь я вижу третий параметр, который является маской, это маска, связанная с буфером трафарета, или это другой параметр, сгенерированный самим openGL ??
может кто-нибудь объяснить процесс сравнения и values
что играют роль в этом процессе ??
glStencilMask (...)
используется для включения или отключения записи в отдельные биты в буфере трафарета. Чтобы сделать количество параметров управляемым и разместить трафаретные буферы различной битовой глубины, требуется GLuint
вместо индивидуального GLboolean
как glColorMask (...)
а также glDepthMask (...)
.
Обычно трафаретный буфер имеет ширину 8 бит, хотя это не обязательно. Маска трафарета по умолчанию такова, что каждая битовая плоскость включена. В 8-битном буфере трафарета это означает, что маска по умолчанию — 0xff (11111111b). Кроме того, в OpenGL 2.0+ трафарет может быть выполнен отдельно для лицевых / оборотных многоугольников, поэтому технически существуют две трафаретные маски.
В своем вопросе вы, вероятно, имеете в виду glStencilFunc (...)
, который также имеет маску. Эта маска связана не с самим буфером трафарета, а с самим тестом трафарета. Принцип тот же, однако; Приведенная выше ссылка подробно описывает, как эта маска AND’d вместе с ref. значение во время тестирования.
Маска — это необязательный дополнительный элемент, который находится между тем, что отрисовано, и тем, что было отправлено для рендеринга.
Представьте, что вы визуализируете сцену, и вдруг решили, что не хотите, чтобы какой-то объект использовался красным. Вы можете использовать маску для применения побитовой операции к каждому пикселю, на который воздействует объект, для удаления красных значений.
r:150 b:50 g:47
становится r:0 b:50 g:47
r:13 b:255 g:255
становится r:0 b:255 g:255
и т.п.
http://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml должно помочь объяснить это немного больше.