在前景看见的OpenGL背景对象纹理

时间:2016-07-26 10:05:55

标签: c++ opengl glsl vao texturing

我正在努力在OpenGL中正确显示我的对象。 问题是背景纹理显示在前景纹理的顶部。 (如图中的叶子所示)

Visualization of the problem 我在os x el capitan上使用OpenGL 4.1 Core。

我的掌上电影:

#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);

是否可以在单个OpenGL上下文中反复使用相同的VAO和程序组合?

如果是这种情况。还有其他人有可能解决这个问题的建议吗?

0 个答案:

没有答案