Если вы используете логические операционные системы, вам не нужно отображать текстуру. Просто используйте трафарет, т. Е. Нарисуйте первую фигуру в буфере трафарета (только), затем используйте тест трафарета, чтобы исключить маскированные пиксели.
(Это руководство предназначено для настольных окон GL, но я думаю, что логика трафарета следует.)
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=26
Если вы хотите использовать текстурирование, я хотел бы предложить оказание первой формы в альфа-канал текстуры (либо OES_framebuffer или с помощью glCopyTexImage2D.
Затем используйте glTexEnv с «объединить» умножить альфа-канал реальной текстуры или цвета, маски текстуры. Это позволит эффективно «вырезать» большую часть вашего пикселей. (Используйте глубину t est, если вы не хотите, чтобы замаскированные пиксели записывались в буфер Z)
Существует одна уродливая сложность подхода, ориентированного на текстуру: вам нужно создать координаты текстуры в пространстве экрана, используя комбинированную модель и матрицу проекций как текстурная матрица, а затем подача вершин в glTexCoordPointer. Это своего рода «бедный человек glTexGen» для аппаратного обеспечения 1.1.
Между двумя подходами, я предлагаю трафарет, если это вообще возможно. Однако наличие буфера трафарета может зависеть от вашего конкретного оконного менеджера.
Прошу извинить меня, если я не был достаточно ясен. То, чего я в принципе не могу добиться, - это маскирование opengl с использованием объекта framebuffer (без использования нескольких блоков текстурирования или шейдеров). – 2009-08-18 17:16:08
Вы нашли решение для этого? Глядя, чтобы сделать это прямо сейчас. –
Решения пока нет. – 2010-01-18 16:18:05