2009-08-18 2 views
0

Если у меня есть текстура объекта неправильной формы и вы хотите ограничить рисование другой текстуры (то есть цветного изображения любого вида) только до формы объекта из первой текстуры, как я могу добиться этого эффекта в OpenGL ES 1.1? Это похоже на форму первой текстуры, как область отсечения.Как сделать обрезку неправильной формы в OpenGL ES 1.1?

Я пытался получить это, используя фреймбуфер, чтобы нарисовать первую текстуру, и используя opengl logical ops, я попытался ограничить рисование только его непрозрачными пикселями и после этого визуализировать следующую текстуру для фреймбуфера получить результат. Но нет успеха.

Кто-нибудь это сделал?

+0

Прошу извинить меня, если я не был достаточно ясен. То, чего я в принципе не могу добиться, - это маскирование opengl с использованием объекта framebuffer (без использования нескольких блоков текстурирования или шейдеров). – 2009-08-18 17:16:08

+0

Вы нашли решение для этого? Глядя, чтобы сделать это прямо сейчас. –

+0

Решения пока нет. – 2010-01-18 16:18:05

ответ

0

Если вы используете логические операционные системы, вам не нужно отображать текстуру. Просто используйте трафарет, т. Е. Нарисуйте первую фигуру в буфере трафарета (только), затем используйте тест трафарета, чтобы исключить маскированные пиксели.

(Это руководство предназначено для настольных окон GL, но я думаю, что логика трафарета следует.)

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=26

Если вы хотите использовать текстурирование, я хотел бы предложить оказание первой формы в альфа-канал текстуры (либо OES_framebuffer или с помощью glCopyTexImage2D.

Затем используйте glTexEnv с «объединить» умножить альфа-канал реальной текстуры или цвета, маски текстуры. Это позволит эффективно «вырезать» большую часть вашего пикселей. (Используйте глубину t est, если вы не хотите, чтобы замаскированные пиксели записывались в буфер Z)

Существует одна уродливая сложность подхода, ориентированного на текстуру: вам нужно создать координаты текстуры в пространстве экрана, используя комбинированную модель и матрицу проекций как текстурная матрица, а затем подача вершин в glTexCoordPointer. Это своего рода «бедный человек glTexGen» для аппаратного обеспечения 1.1.

Между двумя подходами, я предлагаю трафарет, если это вообще возможно. Однако наличие буфера трафарета может зависеть от вашего конкретного оконного менеджера.

+0

Отличный ответ! Спасибо! – 2010-06-15 08:10:24

0

Либо используйте мультитекстурирование и модулируйте одну текстуру другой (альфа), либо визуализируйте ее в буфере трафарета, а затем проверяйте ее, вам нужно будет использовать альфа-и альфа-тест в последнем случае. В любом случае ваша текстура должна иметь форму как альфа-выход из блока текстур, поэтому мульти-текстурная модуляция будет вашим самым быстрым вариантом, я думаю.

Смежные вопросы