如何将纹理应用于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已经发射了纹理坐标,所以我不需要在那里做任何特殊的事情。
发布于 2012-01-07 13:56:14
您的问题是您实际上并没有使用glTexImage2D创建纹理。最后一个参数应该是像素通道颜色的byte[],顺序为红、绿、蓝、Alpha (由其他参数- GL_UNSIGNED_BYTE和GL_RGBA指定),而不仅仅是文件名。
OpenGL不知道文件是什么,不知道如何从系统特定的文件系统中读取文件,也不知道如何解析TGA文件格式。它需要原始的颜色数据,所以您需要加载和解析图像,并将byte[]传递给OpenGL (从技术上讲,第一个元素的指针作为void*)。有一些several guides为你提供了解析TGA文件所需的最少代码,但你也可以使用像FreeImage这样的库来加载你的纹理,而且它不仅仅适用于TGA。
https://stackoverflow.com/questions/8767667
复制相似问题