OpenGL - Как создать независимую прозрачность заказа?
Я работал над игровым движком в образовательных целях, и я столкнулся с этой проблемой, которую я не могу найти для ответа:
Альфа-канал работает только для объектов, которые уже были нарисованы до объекта с альфа-каналом.(Например: в сцене с 3 объектами, скажем, кошка, собака и бутылка (прозрачная). За бутылкой стоят и кошка, и собака; сначала собака нарисована, вторая - бутылка, третья - кошка. только собака будет видна через бутылку).
Я использовал C ++ для движка, Win32 API для редактора и GLSL для шейдинга:
// some code here
vec4 alpha = texture2D(diffuse, texCoord0).aaaa;
vec4 negalpha = alpha * vec4(-1,-1,-1,1) + vec4(1,1,1,0);
vec4 textureComponentAlpha = alpha*textureComponent+negalpha*vec4(1,1,1,0);//(texture2D ( diffuse, texCoord0 ) ).aaaa;
gl_FragColor = (textureComponentAlpha + vec4(additiveComponent.xyz, 0)) * vec4(lightingComponent.xyz, 1);
В C ++:
glEnable(GL_ALPHA_TEST);
glDepthFunc(GL_EQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Я предполагаю, что это связано с тем, как устроен альфа-тест, или с чем-то вроде этого
Может ли кто-нибудь помочь мне исправить это, пожалуйста?