@gibsonen

Не накладывается TIF текстура на модель?

Не накладывается .TIF текстура на модель. Модель выводится черным фоном, подскажите в чем проблема?5a8c5d5d83932534875787.jpeg
class SceneRenderer {
    private static final int vertexLocation = 0;
    private static final int normalLocation = 1;
////
    SceneRenderer(ObjModel objModel, BufferedImage image, ByteBuffer textureUtil) throws Exception {
       ////////////////////
       // Загрузка всех шейдеров
 ...................
/////////////////////////////////////////
       // ТУТ ЗАПИСЫВАЮ ВЕРШИНЫ ИЗ МОДЕЛИ OBJ ФАЙЛА В БУФЕР
        int vertexBuffer = glGenBuffers();
        glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
        glBufferData(GL_ARRAY_BUFFER, Geometry.objFileObject(objModel).rewind(), GL_STATIC_DRAW);

        // ТУТ ЗАПИСЫВАЮ НОРМАЛЬ В БУФЕР
        int normalBuffer = glGenBuffers();
        ....// ТАКИМ ЖЕ ОБРАЗОМ КАК И ВЕРШИНЫ
        //ТУТ ЗАПИСЫВАЕМ КООРДИНАТЫ ТЕКСТУРЫ
        int textureBuffer = glGenBuffers();
        .....// ТАКИМ ЖЕ ОБРАЗОМ КАК И ВЕРШИНЫ

        vaoTriangles = glGenVertexArrays();
        glBindVertexArray(vaoTriangles);

        glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
        glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, false, 0, 0);
        glBindBuffer(GL_ARRAY_BUFFER, normalBuffer);
        glVertexAttribPointer(normalLocation, 3, GL_FLOAT, false, 0, 0);
        glBindBuffer(GL_ARRAY_BUFFER, textureBuffer);
        glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, 0);
        vaoLines = glGenVertexArrays();
        glBindVertexArray(vaoLines);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
        pointsBuffer = glGenBuffers();
        vaoPoints = glGenVertexArrays();

        ///ЗДЕСЬ МОЖЕТ БЫТЬ ОШИБКА , ЗАГРУЗКА ТЕКСТУРЫ
        idTextures = glGenTextures();
        glBindTexture(GL_TEXTURE_2D, idTextures);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture wrapping to GL_REPEAT
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.getWidth(), image.getHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, textureUtil);
        glGenerateMipmap(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, idTextures);

        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glBindVertexArray(0);
    }

    void render() throws Exception {
        ....///

        FloatBuffer vMatrix = BufferUtils.createFloatBuffer(16);
        new Matrix4f()
                .lookAt(cameraPosition.x, cameraPosition.y, cameraPosition.z,
                        0.0f, 0.0f, 0.0f,
                        0.0f, 1.0f, 0.0f).get(vMatrix);

        FloatBuffer mMatrix = BufferUtils.createFloatBuffer(16);
        new Matrix4f().translate(modelPosition)
                .rotateX(modelRotation.x)
                .rotateY(modelRotation.y)
                .rotateZ(modelRotation.z)
                .scale(modelScale)
                .get(mMatrix);

        glUseProgram(simpleProgram);
        glUniformMatrix4fv(glGetUniformLocation(simpleProgram, "P"), false, pMatrix);
        glUniformMatrix4fv(glGetUniformLocation(simpleProgram, "V"), false, vMatrix);


        lightPosition.get(lightPoint);
        glBindBuffer(GL_ARRAY_BUFFER, pointsBuffer);
        glBufferData(GL_ARRAY_BUFFER, lightPoint, GL_STATIC_DRAW);
        glBindVertexArray(vaoPoints);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
        glEnableVertexAttribArray(0);
        glDrawArrays(GL_POINTS, 0, 1);

        glUseProgram(shaderProgram);
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, idTextures);
        glUniform1i(glGetUniformLocation(shaderProgram, "ourTexture"), 0);
        glBindVertexArray(textures);


        glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "P"), false, pMatrix);
        glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "V"), false, vMatrix);
        glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "M"), false, mMatrix);
        glUniform3f(glGetUniformLocation(shaderProgram, "light_worldspace"), lightPosition.x, lightPosition.y, lightPosition.z);

        glBindVertexArray(vaoTriangles);
        glEnableVertexAttribArray(vertexLocation);
        glEnableVertexAttribArray(normalLocation);
        glEnableVertexAttribArray(2);

        glDrawArrays(GL_TRIANGLES, 0, objModel.getIdx().size());
    }
}
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы