почему моя текстура OpenGL прозрачна?

У меня есть ландшафт в OpenGL и две текстуры, которые я комбинирую, используя функцию GLSL mix ().
Вот текстуры, которые я использую.
введите описание изображения здесь

Теперь я могу комбинировать и смешивать эти две текстуры, но по какой-то причине, когда я рендеринг текстур на местности, местность становится прозрачной.
Сначала я рендерил текстуру LHS, а затем рендерил текстуру RHS с альфа-каналом, я не понимаю, почему она прозрачна.

введите описание изображения здесь
Вот интересный факт, на скриншоте вы можете увидеть результат рельефа при рендеринге на Nvidia GPU, когда я рендерил то же самое на interl HD 3k, я получаю другой результат.
Этот результат такой, каким он должен быть, на следующем снимке экрана ничего не видно.

введите описание изображения здесь

Вот мой фрагмент кода шейдера ..

void main()
{
vec4 dryTex   = texture( u_dryTex, vs_texCoord *1 );
vec4 grassTex = texture( u_grassTex, vs_texCoord *1 );
vec4 texColor1= mix(dryTex, grassTex , grassTex.a);
out_fragColor = texColor1;
}

0

Решение

Похоже, вы тоже интерполируете альфа-канал. Компонентно, смесь делает:

texColor1.r = dryTex.r*(1-grassTex.a) + grassTex.r*grassTex.a
texColor1.g = dryTex.g*(1-grassTex.a) + grassTex.g*grassTex.a
texColor1.b = dryTex.b*(1-grassTex.a) + grassTex.b*grassTex.a
texColor1.a = dryTex.a*(1-grassTex.a) + grassTex.a*grassTex.a

Таким образом, альфа-канал для непрозрачного dryTex будет

grassTex.a^2

который прозрачен большую часть времени.

Редактировать:
Исправление будет:

void main()
{
vec4 dryTex   = texture( u_dryTex, vs_texCoord *1 );
vec4 grassTex = texture( u_grassTex, vs_texCoord *1 );
vec4 texColor1= vec4(mix(dryTex.rgb, grassTex.rgb, grassTex.a), 1);
out_fragColor = texColor1;
}
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]