Текстуры фоновых объектов OpenGL, видимые на переднем плане

Я изо всех сил пытаюсь правильно отобразить мои объекты в OpenGL.
Проблема в том, что фоновая текстура отображается поверх текстуры переднего плана. (как видно на картинке с листьями)

Визуализация проблемы
Я использую OpenGL 4.1 Core на OS X El Capitan.

Мой шейдер пальмового дерева:

#version 410 core
//fragment
out vec4 color;
uniform sampler2D text;

in VS_OUT{
vec4 color;
} fs_in;

in vec2 UV;

void main(void){
color = texture(text,UV);
}
//vertex shader
#version 410 core

out VS_OUT{
vec4 color;
} vs_out;

uniform mat4 cam_matrix;
uniform mat4 projection_matrix;
uniform mat4 mv_matrix;

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 vertexUV;
layout(location = 2) in vec3 normals;

out vec2 UV;

void main(void){

vec4 P = projection_matrix * (cam_matrix * mv_matrix) * position;
vs_out.color = position * 2.0 + vec4(0.5, 0.5, 0.5, 0.0);
gl_Position =  P;
UV = vertexUV;

}

Я поместил VAO в менеджер активов, чтобы несколько объектов могли использовать один и тот же VAO и шейдер. Рисунок будет называться так:

 glUseProgram(AssetManager::getProgram(this->program));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,AssetManager::getTexture(this->texture));
glBindVertexArray(AssetManager::getMesh(this->mesh)->getVao());
glUniformMatrix4fv(this->pos_reference, 1, GL_TRUE, &mat.getRawData()[0]);
glEnableVertexAttribArray ( 0 );
glDrawArrays ( GL_TRIANGLES, 0, AssetManager::getMesh(this->mesh)->getSize());
glDisableVertexAttribArray(0);
glBindVertexArray(0);

В начале программы я звоню:

glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glFrontFace(GL_CW);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Можно ли снова и снова использовать одну и ту же комбинацию VAO и программы в одном контексте OpenGL?

Если это так. У кого-нибудь еще есть предложения, которые могут решить эту проблему?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]