2012-01-07 133 views
0

如何将纹理应用于glutSolidSphere?OpenGl - 纹理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

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

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

+0

感谢你的回复罗伯特我认为我明白你的意思,但它会一段时间,直到我完全理解它 – Led 2012-01-07 06:02:35

+0

这是相当简单的,如果你把它分解到非常基础。颜色(至少在电脑中)由3种颜色组成:红色,绿色和蓝色。 (还有透明度:Alpha)。像TGA这样的文件格式不仅仅是一个包含每个像素颜色值的byte []阵列,还有文件标题,压缩文件等等​​。你需要做的是从TGA纹理中去除所有多余的东西以检索原始图像数据。然后您只需将该原始数据发送给OpenGL,然后从那里处理它。 – 2012-01-07 06:09:05

+0

如果你真的可以告诉我这将是太好,不真实:p ...但无论如何感谢你的帮助到目前为止罗伯特我欣赏它 – Led 2012-01-07 06:16:34