C++ 将纹理添加到 GL_QUAD 并且它变黑了

标签 c++ opengl textures texture-mapping

我有一系列不同颜色的矩形,我正在尝试为其中一个添加纹理。但是,当我将纹理应用于给定的矩形时,它只会变成黑色。下面是我用来加载纹理的函数。

GLuint GLWidget:: LoadTexture(const char * pic, int width, int height){

GLuint Texture;
BYTE * data;
FILE * picfile;

picfile = fopen(pic, "rb");
if (picfile == NULL)
    return 0;

data = (BYTE *)malloc(width * height * 3);

fread(data, width * height, 3, picfile);
fclose(picfile);

glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D,  Texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data);

return Texture;
}

在绘制 GL_QUADS 的另一个函数中,我有...

    GLuint myTex = LoadTexture("texture.bmp", 500, 500);

    glEnable(GL_TEXTURE_2D);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

    glBindTexture(GL_TEXTURE_2D, myTex);

    glBegin(GL_QUADS);

    glTexCoord2f(1, 1); glVertex3f(42, 10, 42);
    glTexCoord2f(1, 0); glVertex3f(42, 10, -42);
    glTexCoord2f(0, 0); glVertex3f(-42,10,-42);
    glTexCoord2f(0, 1); glVertex3f(-42,10, 42);

    glEnd();

如果有人能告诉我哪里出错了,那就太好了,谢谢!

最佳答案

这个电话

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, data);

无效。 GL_RGB8 是有效的internalFormat,但它不是format 的有效枚举。如果您的客户端数据是 3 个 channel ,每个 channel 有 8 个无符号整数数据,请使用 GL_RGB、GL_UNSIGNED_BYTE 作为格式和类型。

还有一点是

LoadTexture("texture.bmp", 500, 500);

这表明您正在处理 BMP 文件,但您的加载程序只处理完全原始的图像数据。

关于C++ 将纹理添加到 GL_QUAD 并且它变黑了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589524/

相关文章:

c++ - OpenGL - 纹理四边形被裁剪​​并奇怪地拉伸(stretch)

iphone - iPhone 上的 glgConvertTo_32

c++ - 为从 std::vector 派生的类正确重载 double equals

c++ - 堆变量作用域

opengl - 如何从不同的线程绘制opengl图形?

c++ - (C++ 和 OpenGL)我试图在批处理渲染器中旋转一组顶点(它将模拟一个正方形),但它不是 100% 工作 :(

c++ - glutIdleFunc 不调用空闲函数

c++ - codesynthesis 不解析我的 xml 文件

c++ - 在运行时选择模板参数时如何避免代码呈指数级增长

多维数据集的 IOS GLKit 纹理