无法将纹理绑定到GL_QUADS

问题描述 投票:2回答:1

我尝试在OpenGL中制作动画,我的顶点和动画都可以工作,但是我想用bmp等文件将背景图像放到上面。

因此,经过几次阅读后,我尝试了Quads技术,该技术只是显示一个Quad并将纹理绑定到它。

我使用STB_Image库,看来我正确指向了我的文件(如果我在文件名上犯了错误,我的程序肯定会得到更快的响应)。

并且我实施了打印以查看它是否捕获了正确的文件,并且可以!

我的代码看起来像这样,我的结果是在正确的坐标中出现一个白色正方形,但没有纹理出现,文件已正确加载(打印了正确的大小),它没有绑定或没有出现在正方形上...

glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);

int width, height, nrChannels;
unsigned char* data = stbi_load("test.jpg", &width, &height, &nrChannels, 0);
if (data == NULL) {
    printf("Error in loading the image\n");
    exit(1);
}
printf("Loaded image with a width of %dpx, a height of %dpx and %d channels\n", width, height, nrChannels);
unsigned int texture;

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glVertex2f(2.0, 1.0);
glTexCoord2f(2.0, 1.0);
glVertex2f(8.0, 1.0);
glTexCoord2f(8.0, 1.0);
glVertex2f(8.0, 7.0);
glTexCoord2f(8.0, 7.0);
glVertex2f(2.0, 7.0);
glTexCoord2f(2.0, 7.0);
glEnd();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
if (data)
{
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
}
else
{
    std::cout << "Failed to load texture" << std::endl;
}

glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);

有什么想法吗?

c++ opengl textures glut opengl-compat
1个回答
0
投票

glTexImage2D指定纹理对象的二维纹理图像。您必须要做的是绘制四边形。此外,必须通过glTexImage2D启用二维纹理化。纹理坐标必须在[0.0,1.0]范围内(请参见glEnable(GL_TEXTURE_2D))。必须在How do opengl texture coordinates work?之前设置glTexCoord2f,因为在调用glTexCoord2f时,当前颜色,法线和纹理坐标与顶点关联。由于不生成mipmap(glVertex2f),因此必须将纹理最小化功能(glVertex2f)设置为glVertexglGenerateMipmap。否则纹理将是mipmap不完整的。

glGenerateMipmap
GL_TEXTURE_MIN_FILTER
© www.soinside.com 2019 - 2024. All rights reserved.