LWJGL 3 glEnableVertexAttribArray черный фон - PullRequest
0 голосов
/ 02 ноября 2018

Извините за мой язык (это не мой родной, и я только учусь)

Окей, у меня проблема с черным фоном в моей демо-игре Когда я помещаю другую текстуру для неба (я делаю 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) , появится небо, но тень модели исчезнет.

Пожалуйста, прошу помощи, не могу найти решение в течение недели.

...