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);

Я предполагаю, что это связано с тем, как устроен альфа-тест, или с чем-то вроде этого

Может ли кто-нибудь помочь мне исправить это, пожалуйста?

Ответы на вопрос(3)

Ваш ответ на вопрос