Обрезать или замаскировать 2D-текстуру

Эй, мне было интересно, знает ли кто-нибудь, как сделать отсечение с 2D-текстурами для графического интерфейса или меню, такого как система.

Вот пример вывода, который я хотел бы произвести

Иметь игровой экран размером 500 х 500. С экраном за ним размером 1000 х 1000.

Когда я рисую текстуру в 0, 0 с родительским экраном 500 x 500, я бы хотел, чтобы компонент не отображался

но если я нарисую компонент на 500, 450, а ширина и высота текстуры равны 100, я ожидаю увидеть только всю ширину, но только половину высоты компонента.

Мне было интересно, есть ли простой способ сделать это?

Редактировать:

В основном я думал о чем-то вроде эффекта маски в Photoshop.

вот картинка обрезка картинки

Черный контур — это место, где будет нарисована вторая половина текстуры.


person Chris Watts    schedule 03.07.2009    source источник


Ответы (2)


Вы можете обрезать текстуру. Когда результирующая фигура является многоугольной,
вы можете сделать это, просто изменив вершины и координаты текстуры.

Когда обрезанная текстура имеет сложную форму, все становится сложнее.

Вы также можете вырезать, просто рисуя все в правильном порядке.
Это может быть неэффективно, но это просто.

p.s. Здесь поможет картинка.

person Rhythmic Fistman    schedule 03.07.2009

Другой способ решить эту проблему:

По сути, вам нужно нарисовать две сцены: экран игры (синяя часть вашего изображения). ) и фоновый экран (красная часть вашего изображения).

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

Следующим шагом является вырезание всего растрового изображения фонового экрана в объект выходного растрового изображения, а затем вы можете обрезать только центральную часть (квадрат 500 x 500 с центром на выходном экране) игрового экрана.


P.S. Возможно, было бы лучше, если бы вы добавили больше информации об используемой вами графической библиотеке.

person Alceu Costa    schedule 04.07.2009
comment
Ну, красный должен был быть еще одним экраном за ним. - person Chris Watts; 04.07.2009