如何将纹理应用于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已经发出了纹理坐标,所以我不必在那里做任何特别的事情。
答案 0 :(得分:1)
您的问题是您实际上并未使用glTexImage2D
创建纹理。最后一个参数应为byte[]
像素通道颜色,顺序为红色,绿色,蓝色,Alpha(由您的其他参数指定 - GL_UNSIGNED_BYTE
和GL_RGBA
),而不仅仅是文件名。
OpenGL不知道文件是什么,如何从系统特定的文件系统读取文件,或者如何解析TGA文件格式。它期望原始颜色数据,因此您需要加载和解析图像并将byte[]
传递给OpenGL(技术上指向第一个元素的指针为void*
)。有several guides为您提供解析TGA文件所需的最少代码,但您也可以使用像FreeImage这样的库来处理加载纹理,它可以使用更多而不仅仅是TGA。