c ++ opengl在另一个纹理前面绘制纹理

时间:2016-09-27 08:29:14

标签: c++ opengl

我正试图在texture2之上绘制texture1 部分(纹理具有不同的位置坐标)。假设纹理有不同的图像。

下面的代码工作正常,只有texture1位于texture2之前,但它应该是相反的。

如果我更改了绘图顺序,texture2会根据需要在texture1前面,但texture2会获得与texture1相同的图像。
我在这做错了什么?

在我的初始化函数中:

glBindAttribLocation(shaderProgram, 0, "position");
glBindAttribLocation(shaderProgram, 1, "color");
glBindAttribLocation(shaderProgram, 2, "texCoordIn");
glBindFragDataLocation(shaderProgram, 0, "fragmentColor");
linkShaderProgram(shaderProgram);

texture = ilutGLLoadImage("image1.jpg"); 
glActiveTexture(GL_TEXTURE0);          
glBindTexture(GL_TEXTURE_2D, texture1); 

texture2 = ilutGLLoadImage("image2.png");
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);

glUseProgram(shaderProgram);        
int texLoc = glGetUniformLocation(shaderProgram, "colortexture");     
glUniform1i(texLoc, 0);  

我的顶点着色器:

in vec3     position;
in vec3     color;
out vec3    outColor;

in vec2     texCoordIn; 
out vec2    texCoord; 

uniform mat4 projectionMatrix; 

void main() 
{
    gl_Position = projectionMatrix * vec4(position, 1);
    outColor = color; 
    texCoord = texCoordIn; 
}

我的片段着色器:

in vec3 outColor;
uniform sampler2D colortexture;
in vec2 texCoord;    

out vec4 fragmentColor;

void main() 
{
    fragmentColor = texture2D(colortexture, texCoord.xy); 
}

在我的绘图功能中:(如果我按照下面的顺序绘制,纹理会得到他们想要的图像。但是如果我改变顺序,两个纹理都会得到图像1)

glBindVertexArray(vertexArrayObject2);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

glBindVertexArray(vertexArrayObject);
glActiveTexture(GL_TEXTURE0);             
glBindTexture(GL_TEXTURE_2D, texture1); 
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

0 个答案:

没有答案