Es fängt schon damit an, dass manche Quellen behaupten, man bräuchte für jede der 6 Texturen ein Texture Object und andere meinen, 1 für alle würde reichen...
Hier mal ein wenig Code:
Textur laden:
Code: Alles auswählen
void LoadTextureInObject(GLuint TextureObject, QString Filename, GLenum Target)
{
//do some serious texture loading:
QImage Image;
if(!Image.load(Filename))
{
std::cout << Filename.toStdString() << " couldn't be loaded... :(\n";
return;
}
glBindTexture(Target, TextureObject);
QGLWidget::convertToGLFormat(Image);
glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(Target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
gluBuild2DMipmaps(Target, 4, Image.width(), Image.height(), GL_RGBA, GL_UNSIGNED_BYTE, Image.bits());
}
Code: Alles auswählen
void GlSphere::Init()
{
glGenTextures(1, &m_CubeMap);
LoadTextureInObject(m_CubeMap, "images/wall.png", GL_TEXTURE_CUBE_MAP_POSITIVE_X);
LoadTextureInObject(m_CubeMap, "images/wall.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
LoadTextureInObject(m_CubeMap, "images/sky.png", GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
LoadTextureInObject(m_CubeMap, "images/floor.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
LoadTextureInObject(m_CubeMap, "images/wall.png", GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
LoadTextureInObject(m_CubeMap, "images/wall.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
//glBindTexture(GL_TEXTURE_CUBE_MAP, m_CubeMap);
}
void GlSphere::Render()
{
glDisable(GL_TEXTURE_2D);
for(int i=0; i<6; ++i)
glBindTexture(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, m_CubeMap);
glColor3f(1, 1, 1);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_CUBE_MAP);
//Primitiven zeichnen blabla...
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_CUBE_MAP);
}