c++ - OpenGl - 纹理 glutSolidSphere?

标签 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 已经发出纹理坐标,所以我不需要在那里做任何特别的事情。

最佳答案

您的问题是您实际上并未使用 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/

相关文章:

c++ - 一个简单的 vector ,如何正确地重新分配新数组的地址

c++ - 将数据从 std::vector 传递到 glsl 中的统一数组

java - 在 libgdx 3D 中对立方体进行纹理化

opengl - GL_DEPTH_TEST 和透明纹理的渲染故障

C++运算符<<类的成员

c++ - 如何使用 libjpeg 获取 JPEG 文件方向

c++ - CullVisitor::apply(Geode&) 检测到 NaN,

c++ - 在 Qt 中创建原始 GL 上下文?

opengl - glEnableClientState 与现代 OpenGL(glVertexAttribPointer 等)

c++ - 使用平截头体时 OpenGL 远剪裁