Ich habe ziemlich das gleiche Problem als dieses OpenGl goes too dark, aber die Antwort funktioniert nicht für mich. Ich versuche, ein Bild dank einer Oberfläche zu einer Textur und das Ergebnis ist auch verdammt dunkel umgewandelt anzuzeigen:OpenGL Texturen Formular SDLSurface geht zu dunkel
Original:
nach openGL
Links ist das Original, rechts das OpenGl img.
Hier ist mein Code:
void TexturedRect::draw(int scroll){
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, _texture);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS); //Begining the cube's drawing
int x = this->getX();
int y = this->getY();
int w = this->getWidth();
int h = this->getHeight();
int z = this->getZ();
/*
(0,0) ------ (1,0)
| |
| |
(0,1) ------ (1,1)
*/
glTexCoord3i(0, 0, 1);glVertex3i(x + scroll, y, z);
glTexCoord3i(_tv, 0, 1);glVertex3i(x + w * _tv + scroll, y, z);
glTexCoord3i(_tv, _tu, 1);glVertex3i(x + w * _tv + scroll, y + h * _tu, z);
glTexCoord3i(0, _tu, 1);glVertex3i(x + scroll, y + h * _tu, z);
glEnd();
glDisable(GL_TEXTURE_2D);
}
void TexturedRect::createTextureFromSurface()
{
SDL_Surface * surface = IMG_Load(filename.toStdString().c_str());
// get the number of channels in the SDL surface
GLint nbOfColors = surface->format->BytesPerPixel;
GLenum textureFormat = 0;
switch (nbOfColors) {
case 1:
textureFormat = GL_ALPHA;
break;
case 3: // no alpha channel
if (surface->format->Rmask == 0x000000ff)
textureFormat = GL_RGB;
else
textureFormat = GL_BGR;
break;
case 4: // contains an alpha channel
if (surface->format->Rmask == 0x000000ff)
textureFormat = GL_RGBA;
else
textureFormat = GL_BGRA;
break;
default:
qDebug() << "Warning: the image is not truecolor...";
break;
}
glEnable(GL_TEXTURE_2D);
// Have OpenGL generate a texture object handle for us
glGenTextures(1, &_texture);
// Bind the texture object
glBindTexture(GL_TEXTURE_2D, _texture);
// Edit the texture object's image data using the information SDL_Surface gives us
glTexImage2D(GL_TEXTURE_2D, 0, nbOfColors, surface->w, surface->h, 0,
textureFormat, GL_UNSIGNED_BYTE, surface->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
Können Sie es mit anderen Dateien reproduzieren? –
Leider scheint das Problem (scheint) unabhängig von der Datei zu sein ... –
Scheint seltsam, 'nbOfColors' für den' internalFormat' Parameter von glTexImage2D zu übergeben. – Brian