如何将纹理应用于 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 已经发出纹理坐标,所以我不需要在那里做任何特别的事情。
最佳答案
您的问题是您实际上并未使用 glTexImage2D
创建纹理。最后一个参数应该是 byte[]
像素 channel 颜色,顺序为红色、绿色、蓝色、Alpha(由您的其他参数指定 - GL_UNSIGNED_BYTE
和 GL_RGBA
),而不仅仅是文件名。
OpenGL 不知道文件是什么,如何从系统特定的文件系统读取文件,或者如何解析 TGA 文件格式。它需要原始颜色数据,因此您需要加载和解析图像并将 byte[]
传递给 OpenGL(从技术上讲,指向第一个元素的指针是 void*
) .有several guides为您提供解析 TGA 文件所需的最少代码,但您也可以使用像 FreeImage 这样的库处理加载您的纹理,它不仅适用于 TGA。
关于c++ - OpenGl - 纹理 glutSolidSphere?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767667/