-
Автор темы
- #1
Всех приветствую, хотел сделать ПО с красивым интерфейсом на imgui и всё это на DirectX11, но когда захотел сделать background blur программы (в моём случае фон прозрачный, то есть мне надо размывать всё, что за окном программы) столкнулся с тем что я не понимаю как сделать его, в просторах интернета нашёл интересный github repo
данный код компилируется (уже спасибо) но по итогу я получаю просто пустое окно:
Можете пожалуйста подсказать как мне сделать прозрачный размытый фон?
В заранее всех благодарю, а я пока пойду утоплюсь т.к. после изучения всего этого безобразия у меня вскипел мозг :(
Пожалуйста, авторизуйтесь для просмотра ссылки.
в котором показано как через DirectX11 создавать HLSL Shader, я убрал задник и начал работать с этим репо, в итоге у меня ничего не получилось, вот код который я попробовал для создания blur эффекта:
HLSL Gausing Blur:
Texture2D inputTexture; // Входная текстура
SamplerState textureSampler : register(s0); // Сэмплер для чтения текстуры
float2 texelSize; // Размер одного текселя
// Функция для размытия горизонтально
float4 HorizontalBlurShader(float2 texCoord)
{
float4 color = float4(0.0, 0.0, 0.0, 0.0);
// Применяем веса для текущего пикселя и его соседей
color += inputTexture.Sample(textureSampler, texCoord - 4.0 * texelSize) * 0.05;
color += inputTexture.Sample(textureSampler, texCoord - 3.0 * texelSize) * 0.09;
color += inputTexture.Sample(textureSampler, texCoord - 2.0 * texelSize) * 0.12;
color += inputTexture.Sample(textureSampler, texCoord - texelSize) * 0.15;
color += inputTexture.Sample(textureSampler, texCoord) * 0.16;
color += inputTexture.Sample(textureSampler, texCoord + texelSize) * 0.15;
color += inputTexture.Sample(textureSampler, texCoord + 2.0 * texelSize) * 0.12;
color += inputTexture.Sample(textureSampler, texCoord + 3.0 * texelSize) * 0.09;
color += inputTexture.Sample(textureSampler, texCoord + 4.0 * texelSize) * 0.05;
return color;
}
// Функция для размытия вертикально
float4 VerticalBlurShader(float2 texCoord)
{
float4 color = float4(0.0, 0.0, 0.0, 0.0);
// Применяем веса для текущего пикселя и его соседей
color += inputTexture.Sample(textureSampler, texCoord - 4.0 * texelSize) * 0.05;
color += inputTexture.Sample(textureSampler, texCoord - 3.0 * texelSize) * 0.09;
color += inputTexture.Sample(textureSampler, texCoord - 2.0 * texelSize) * 0.12;
color += inputTexture.Sample(textureSampler, texCoord - texelSize) * 0.15;
color += inputTexture.Sample(textureSampler, texCoord) * 0.16;
color += inputTexture.Sample(textureSampler, texCoord + texelSize) * 0.15;
color += inputTexture.Sample(textureSampler, texCoord + 2.0 * texelSize) * 0.12;
color += inputTexture.Sample(textureSampler, texCoord + 3.0 * texelSize) * 0.09;
color += inputTexture.Sample(textureSampler, texCoord + 4.0 * texelSize) * 0.05;
return color;
}
// Основная функция шейдера
float4 main(float2 texCoord : TEXCOORD) : SV_Target
{
float4 blurredColor = float4(0.0, 0.0, 0.0, 0.0);
// Размываем горизонтально
blurredColor += HorizontalBlurShader(texCoord);
// Размываем вертикально
blurredColor += VerticalBlurShader(texCoord);
return blurredColor;
}
Можете пожалуйста подсказать как мне сделать прозрачный размытый фон?
В заранее всех благодарю, а я пока пойду утоплюсь т.к. после изучения всего этого безобразия у меня вскипел мозг :(