【发布时间】:2016-05-05 15:14:57
【问题描述】:
我有一个问题,我想在一个简单的立方体上绑定一个纹理,但是我的纹理没有显示,我真的不知道我做错了什么。
这是我程序的纹理部分:
void loadTextureSTD(char * path, int size, int size_x, int size_y)
{
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
texture = loadImageSTD(path, size, size_x, size_y);
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGB,
size_x , size_y, 0, GL_RGB,
GL_UNSIGNED_BYTE, texture
);
}
这是显示部分:
glTexCoordPointer(2, GL_FLOAT, 0, vector_array_p0);
glVertexPointer(3, GL_FLOAT, 0, vector_array_p0); GL_VERTEX_ARRAY (p0)
glNormalPointer(GL_FLOAT, 0, normals_array_p0);
glDrawElements(GL_TRIANGLES, animation0, GL_UNSIGNED_INT, face_array_p0);
这是我的结果(Light is on 0, 10, 0): result
【问题讨论】:
-
(1) 您确定 GL 已正确初始化吗?例如。你能显示一个漫反射阴影立方体吗?如果不是,则需要提出另一条问题路径。以下假设您的问题是纹理而不是基本 GL。 (2) RGB 每个像素应该有 3 个字节,但您似乎只读取 1。我错了吗?
-
是的,我从 ppm 文件中读取了 1 个字节...我理解错了吗?
-
我发现 glGenTextures 生成 0 有人知道我做错了什么吗??
-
鉴于
glGenTextures返回 0,您可能在调用线程中没有活动的 GL 上下文。实现不需要这样做(实际上它实际上是不受欢迎的——因为应该没有存储错误状态的上下文),但有些可能会引发GL_INVALID_OPERATION错误,您可以使用 @ 进行测试987654326@ 如果您在没有激活上下文的情况下进行 API 调用。
标签: c opengl textures glut freeglut