OpenGL SOIL - 加载纹理失败
Posted
技术标签:
【中文标题】OpenGL SOIL - 加载纹理失败【英文标题】:OpenGL SOIL - Failure to Load Texture 【发布时间】:2017-04-12 07:15:30 【问题描述】:我正在一步一步地关注this tutorial,我什至复制粘贴了整个代码,但仍然无法加载纹理。这是我的代码,涉及问题的部分:
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture); // All upcoming GL_TEXTURE_2D operations now have effect on this texture object
// Set the texture wrapping parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture wrapping to GL_REPEAT (usually basic wrapping method)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// Set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Load image, create texture and generate mipmaps
int width, height;
unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
SOIL_free_image_data(image);
glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture when done, so we won't accidentily mess up our texture.
这是我的着色器:
#version 330 core
in vec3 ourColor;
in vec2 TexCoord;
out vec4 color;
uniform sampler2D ourTexture;
void main()
color = texture(ourTexture, TexCoord);
和
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;
out vec3 ourColor;
out vec2 TexCoord;
void main()
gl_Position = vec4(position, 1.0f);
ourColor = color;
TexCoord = texCoord;
我正在使用 SOIL 加载图像数据。是不是太陈旧了?我该怎么办?
【问题讨论】:
您的项目结构是什么样的?container.jpg
可能不在项目目录的根目录中。
unsigned char* 图像的校验值
正如 Mozfox 所说:if (!image) std::cerr << "image load error\n";
@vallentin:它在我项目的根目录中。
@justus: 没有图片加载错误!
【参考方案1】:
您正在关注的教程code 似乎是错误的,因为它没有调用glActiveTexture
或glUniform
。请参阅教程末尾的另一个文件的game loop code。
也许你错过了这样的东西:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture"), 0);
【讨论】:
FYI the LearnOpenGL tutorial did include this.以上是关于OpenGL SOIL - 加载纹理失败的主要内容,如果未能解决你的问题,请参考以下文章