我正试图在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);