Извините за мой язык (это не мой родной, и я только учусь)
Окей, у меня проблема с черным фоном в моей демо-игре
Когда я помещаю другую текстуру для неба (я делаю Skybox), фон остается черным
Я понял, что это из-за этой строки:
normalAttribute = glGetAttribLocationARB(program, "aNormal");
glEnableVertexAttribArrayARB(normalAttribute);
Но я когда пытался удалить ее или изменить на glDisableVertexAttribArrayARB - я получил следующее:
введите описание изображения здесь
Если не удалить (но черный фон черный)
введите описание изображения здесь
Мои методы с загрузкой программы:
static int createShader(String resource, int type) throws IOException {
int shader = glCreateShaderObjectARB(type);
ByteBuffer source = ioResourceToByteBuffer(resource, 1024);
PointerBuffer strings = BufferUtils.createPointerBuffer(1);
IntBuffer lengths = BufferUtils.createIntBuffer(1);
strings.put(0, source);
lengths.put(0, source.remaining());
glShaderSourceARB(shader, strings, lengths);
glCompileShaderARB(shader);
int compiled = glGetObjectParameteriARB(shader, GL_OBJECT_COMPILE_STATUS_ARB);
String shaderLog = glGetInfoLogARB(shader);
if (shaderLog.trim().length() > 0) {
System.err.println(shaderLog);
}
if (compiled == 0) {
throw new AssertionError("Could not compile shader");
}
return shader;
}
void createProgram() throws IOException {
program = glCreateProgramObjectARB();
int vertexShader = createShader("org/lwjgl/demo/opengl/assimp/magnet.vs",
GL_VERTEX_SHADER_ARB);
int fragmentShader = createShader("org/lwjgl/demo/opengl/assimp/magnet.fs",
GL_FRAGMENT_SHADER_ARB);
glAttachObjectARB(program, vertexShader);
glAttachObjectARB(program, fragmentShader);
glLinkProgramARB(program);
int linkStatus = glGetObjectParameteriARB(program, GL_OBJECT_LINK_STATUS_ARB);
String programLog = glGetInfoLogARB(program);
if (programLog.trim().length() > 0) {
System.err.println(programLog);
}
if (linkStatus == 0) {
throw new AssertionError("Could not link program");
}
glUseProgramObjectARB(program);
vertexAttribute = glGetAttribLocationARB(program, "aVertex");
glEnableVertexAttribArrayARB(vertexAttribute);
normalAttribute = glGetAttribLocationARB(program, "aNormal");
glEnableVertexAttribArrayARB(normalAttribute);
modelMatrixUniform = glGetUniformLocationARB(program, "uModelMatrix");
viewProjectionMatrixUniform = glGetUniformLocationARB(program, "uViewProjectionMatrix");
normalMatrixUniform = glGetUniformLocationARB(program, "uNormalMatrix");
lightPositionUniform = glGetUniformLocationARB(program, "uLightPosition");
viewPositionUniform = glGetUniformLocationARB(program, "uViewPosition");
ambientColorUniform = glGetUniformLocationARB(program, "uAmbientColor");
diffuseColorUniform = glGetUniformLocationARB(program, "uDiffuseColor");
specularColorUniform = glGetUniformLocationARB(program, "uSpecularColor");
}
Я использую код (+ мой код со SkyBox):
https://github.com/LWJGL/lwjgl3-demos/blob/master/src/org/lwjgl/demo/opengl/assimp/WavefrontObjDemo.java
Для тех, кто не до конца понимает суть проблемы:
Когда я добавляю новую программу (в данном случае скайбокс), фон остается черным. Если я удалю эту строку glEnableVertexAttribArrayARB (normalAttribute) , появится небо, но тень модели исчезнет.
Пожалуйста, прошу помощи, не могу найти решение в течение недели.