Частичное затухание изображения / прямоугольника в xna - PullRequest
2 голосов
/ 02 марта 2011

Как мне частично затенить прямоугольник или изображение в xna следующим образом:

enter image description here

Я использую xna 3.1 и SpriteBatch.Draw(). Мне нужно, чтобы он был частично прозрачным, чтобы я мог видеть, что за этим стоит.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Просто чтобы добавить к ответу Эндрю, есть третий (гораздо более медленный) способ сделать это без написания шейдера или нового дозатора. Просто используйте метод GetData для Texture2D, чтобы извлечь данные о пикселях, просмотрите их в цикле for, изменяя значения альфа-канала так, как вы хотите, а затем используйте SetData, чтобы вернуть их обратно. Это УЖАСНЫЙ способ сделать что-то, если вы постоянно меняете альфа-значения, но похоже, что вы просто хотите изменить альфа-значения один раз, так что у вас просто будут дополнительные издержки при загрузке программы, и после этого все должно работать гладко. Кроме того, если вы делаете это только с небольшим количеством изображений, разница в производительности практически незначительна. Вот некоторый код для начала работы:


Color[] texColors = new Color[myTexture.Width * myTexture.Height];
myTexture.GetData<Color>(texColors);
for(int i = 0; i < texColors.Length; i++)
{
  //change alpha values the way you want
}
myTexture.SetData<Color>(texColors);

0 голосов
/ 02 марта 2011

«Правильный» способ сделать это состоит в том, чтобы прекратить использовать SpriteBatch и вручную рисовать квады или вместо этого написать свой собственный дозатор спрайтов.Таким образом, вы можете индивидуально управлять альфа-значениями вершин.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...