Я хотел создать полупрозрачный накладку для моего экрана и решил динамически создавать пользовательский объект Texture2D
, используя следующий код:Динамического создания Texture2D
const int TEX_WIDTH = 640;
const int TEX_HEIGHT = 480
Texture2D redScreen;
void GenerateTextures(GraphicsDevice device)
{
redScreen = new Texture2D(device, TEX_WIDTH, TEX_HEIGHT);
uint[] red = new uint[TEX_WIDTH * TEX_HEIGHT];
for (int i = 0; i < TEX_WIDTH * TEX_HEIGHT; i++)
red[i] = 0x1A0000ff;
redScreen.SetData<uint>(red);
}
И это только, кажется, не работает ожидается! Глядя на этот код, я ожидаю, что значение альфа будет около 10%. (0x1A/0xFF = ~ 10)
, но в итоге это намного больше. Мне кажется, что uint
представляет значение ARGB, но значение прозрачности никогда не будет таким, каким я его устанавливал. он либо «несколько прозрачен», либо вообще не прозрачен.
Мне не нравятся задавать смутные вопросы,
Но что я делаю неправильно?
Что случилось с этим фрагментом кода?
Edit: В конце концов, я мог бы только получить нужный результат, установив BlendState.NonPremultiplied
в spriteBatch.Begin()
вызова.
Уг, это также вызвало неожиданные результаты. В конце концов, установка 'BlendState.NonPremultiplied' в' 'spriteBatch.Begin()' call' фиксирует «все». – Acidic
Просто вы знаете, что BlendState.NonPremultiplied приведет к небольшому результативному результату по сравнению с любым другим режимом смешивания. – ClassicThunder
Это несчастливо, но если я не смогу найти способ добиться этого в обычном режиме BlendState, я боюсь, что у меня нет другого выбора. – Acidic