Когда я пытаюсь реализовать прозрачность для своих текстур в LWJGL 3, модели кажутся полностью прозрачными и, таким образом, вообще не видны.Когда я снимаю чек, он работает нормально.Любая подсказка о том, почему?
Вот код шейдера, где проверяется альфа-компонент:
#version 430
in vec2 pass_textureCoords;
in vec3 surfaceNormal;
in vec3 toLightVector[5];
in vec3 toCameraVector;
in float visibility;
out vec4 out_Color;
uniform sampler2D textureSampler;
uniform vec3 lightColour[5];
uniform vec3 attenuation[5];
uniform float shineDamper;
uniform float reflectivity;
uniform vec3 skyColour;
void main(void) {
vec3 unitNormal = normalize(surfaceNormal);
vec3 unitVectorToCamera = normalize(toCameraVector);
vec3 totalDiffuse = vec3(0.0);
vec3 totalSpecular = vec3(0.0);
for (int i = 0; i < 5; i++) {
float distance = length(toLightVector[i]);
float attFactor = attenuation[i].x + (attenuation[i].y * distance) + (attenuation[i].z * distance * distance);
vec3 unitLightVector = normalize(toLightVector[i]);
float nDot1 = dot(unitNormal, unitLightVector);
float brightness = max(nDot1, 0.0);
vec3 lightDirection = -unitLightVector;
vec3 reflectedLightDirection = reflect(lightDirection, unitNormal);
float specularFactor = dot(reflectedLightDirection, unitVectorToCamera);
specularFactor = max(specularFactor, 0.0);
float dampedFactor = pow(specularFactor, shineDamper);
totalDiffuse = totalDiffuse + (brightness * lightColour[i])/attFactor;
totalSpecular = totalSpecular + (dampedFactor * reflectivity * lightColour[i])/attFactor;
}
totalDiffuse = max(totalDiffuse, 0.2);
////////////////////////////////////////////////////////////////////////////
vec4 textureColour = texture(textureSampler, pass_textureCoords);
if (textureColour.a < 0.5) {
discard;
}
////////////////////////////////////////////////////////////////////////////
out_Color = vec4(totalDiffuse, 1.0) * textureColour + vec4(totalSpecular, 1.0);
out_Color = mix(vec4(skyColour,1.0),out_Color, visibility);
}
Я трижды проверил, все ли загружено в шейдер в правильном порядке и т. Д.,но единственный способ заставить текстуры появляться - это убрать эту проверку.
Пожалуйста, спросите что-нибудь еще полезное.Спасибо!
РЕДАКТИРОВАТЬ 1:
Загрузка текстуры из изображения:
protected Texture loadTexture(BufferedImage image, String info) {
Texture texture;
int width = image.getWidth();
int height = image.getHeight();
int[] pixels = image.getRGB(0, 0, width, height, null, 0, width);
ByteBuffer buffer = BufferUtils.createByteBuffer((width * height) * 4);
int id = glGenTextures();
for (int i = 0; i < pixels.length; i++) {
byte r = (byte)((pixels[i] >> 16) & 0xFF);
byte g = (byte)((pixels[i] >> 8) & 0xFF);
byte b = (byte)(pixels[i] & 0xFF);
byte a = (byte)((pixels[i] >> 24) * 0xFF);
buffer.put(r);
buffer.put(g);
buffer.put(b);
buffer.put(a);
}
buffer.flip();
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
glBindTexture(GL_TEXTURE_2D, 0);
texture = new Texture(id, buffer, width, height);
if (info != "") processData(info, texture);
return texture;
}
РЕДАКТИРОВАТЬ 2:
После попытки Out_Color = vec4(textureColour.aaa, 1.0);
![enter image description here](https://i.stack.imgur.com/eVwYw.png)