【发布时间】:2016-01-16 18:17:11
【问题描述】:
我正在尝试在 OpenGL 3 中渲染 2 个纹理。 我创建了两个 GLfloat 类型的顶点数组,生成并绑定了缓冲区等。
注意:纹理加载功能正常,我之前已经加载了一个纹理,现在我只需要同时渲染2个纹理。
然后我像这样加载我的纹理:
GLuint grass = texture.loadTexture("grass.bmp");
GLuint grassLoc = glGetUniformLocation(programID, "grassSampler");
glUniform1i(grassLoc, 0);
GLuint crate = texture.loadTexture("crate.bmp");
GLuint crateLoc = glGetUniformLocation(programID, "crateSampler");
glUniform1i(crateLoc, 1);
我是这样画的:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, grass);
glDrawArrays(GL_TRIANGLES, 0, 6);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, crate);
glDrawArrays(GL_TRIANGLES, 2, 6);
顶点着色器:
#version 330 core
layout(location = 0) in vec3 grassPosition;
layout(location = 1) in vec2 grassUvPosition;
layout(location = 2) in vec3 cratePosition;
layout(location = 3) in vec2 crateUvPosition;
out vec2 grassUV;
out vec2 crateUV;
uniform mat4 MVP;
void main(){
gl_Position = MVP * vec4(grassPosition,1);
gl_Position = MVP * vec4(cratePosition,1);
grassUV = grassUvPosition;
crateUV = crateUvPosition;
}
片段着色器:
#version 330 core
in vec2 grassUV;
in vec2 crateUV;
out vec3 grassColor;
out vec3 crateColor;
uniform sampler2D grassSampler;
uniform sampler2D crateSampler;
void main(){
crateColor = texture(grassSampler, grassUV).rgb;
grassColor = texture(crateSampler, crateUV).rgb;
}
谁能看出我做错了什么?
编辑: 我正在尝试在 2 个不同的 VAO 上渲染 2 个不同的纹理
【问题讨论】:
-
我不完全清楚你在这里实际上想要完成什么。您能否添加有关您期望发生的事情的详细信息?