OpenGl - 纹理glutSolidSphere?

时间:2012-01-07 05:34:58

标签: c++ opengl 3d textures glut

如何将纹理应用于glutSolidSphere?

这是我尝试过的,但它不起作用:

GLuint textureid;
    glGenTextures(1, &textureid);
    glBindTexture(GL_TEXTURE_2D, textureid);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, "stone.tga");
// Planet
    glDisable(GL_LIGHTING);
    glBindTexture(GL_TEXTURE_2D, textureid);
    glutSolidSphere(35.0f, 30, 17);
    glEnable(GL_LIGHTING);

有人可以指导我如何加载纹理并启用它。

我听说glutSolidSphere已经发出了纹理坐标,所以我不必在那里做任何特别的事情。

1 个答案:

答案 0 :(得分:1)

您的问题是您实际上并未使用glTexImage2D创建纹理。最后一个参数应为byte[]像素通道颜色,顺序为红色,绿色,蓝色,Alpha(由您的其他参数指定 - GL_UNSIGNED_BYTEGL_RGBA),而不仅仅是文件名。

OpenGL不知道文件是什么,如何从系统特定的文件系统读取文件,或者如何解析TGA文件格式。它期望原始颜色数据,因此您需要加载和解析图像并将byte[]传递给OpenGL(技术上指向第一个元素的指针为void*)。有several guides为您提供解析TGA文件所需的最少代码,但您也可以使用像FreeImage这样的库来处理加载纹理,它可以使用更多而不仅仅是TGA。