 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 16.01.2004, 13:50 Titel: OpenGL Blend |
|
|
Hi,
Ich will mit OpenGL ein Bitmap auf den Bildschirm bringen. (Wie einfallsreich nich )
Auf jeden Fall schaff ich das ja eigentlich auch. Jetzt will ich aber das die schwarze Hintergrundfarbe nicht angezeigt wird. Laut den NEhe tuts hab ich alles richtig gemacht... aber irgendwie funzt es nich. Das Programm vertweigert einfach das anzeigen der Textur. Wenn ich die Textur aber normal erstelle(also als MipMap) dann funzt es.
So erzeuge ich die Textur:
Code: | glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, pBitmap->sizeX, pBitmap->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pBitmap->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); |
Vielleicht liegts ja auch an dem Zeug in meiner Initfunktion:
Code: |
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 1.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
Es muss irgendwie ein logischer Fehler sein. Denn funktionieren tut das Programm ja ...
Vision |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 16.01.2004, 15:29 Titel: |
|
|
schonmal probiert die opengl fehler abzufragen ?
Code: |
std::cout << gluErrorString( glGetError() );
|
setzt das am besten zwischen deine ganzen aufrufe, dann kannst du sehen, wo da ein fehler ist.
Ansonsten würde ich mal überprüfen, ob die Polygone auf die die textur angezeigt werden soll nicht vielleicht backface sind. |
|
Nach oben |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 16.01.2004, 18:09 Titel: |
|
|
Backface kann nicht sein, da es ja auch funktioniert wenn ich die Textur als MipMap erzeuge.
Das mit dem OpenGL Error String probier ich gleich mal aus.
Felix |
|
Nach oben |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 16.01.2004, 19:00 Titel: |
|
|
Aha, hab den Fehler. Die Funktion:
Code: | glTexImage2D(GL_TEXTURE_2D, 0, 3, pBitmap->sizeX, pBitmap->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pBitmap->data);
|
Da muss ein Fehler drin sein.... bloß welcher... die Ausgabe von gluErrorirgendwas() ist invalide value. Für mich sieht das aber alles richtig aus...
[EDIT]
hab den Fehler gefunden. Lag daran das die Textur keine 2er Potenzengröße hatte.
Thx für deine Hilfe Xardias
[/EDIT] |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 17.01.2004, 18:01 Titel: |
|
|
ja sowas ist verdammt nervig. ich habe meine Image klasse extra dafür umgeschrieben, damit kann man dann auch texturen beliebiger größe erzeugen.
Code: |
byte * data = ( byte * ) image->getPixels();
m_width = image->getWidth();
m_height = image->getHeight();
bool scale = false;
int nextw;
int nexth;
//suche dir die nächste 2er potenz in die das bild passt (breite)
float lgw = logf( m_width ) / logf( 2 );
if ( lgw != ( int )lgw )
{
nextw = pow( 2, 1 + ( int )lgw );
scale = true;
}
else
{
nextw = m_width;
}
//suche dir die nächste 2er potenz in die das bild passt (höhe)
float lgh = logf( m_height ) / logf( 2 );
if ( lgh != ( int )lgh )
{
nexth = pow( 2, 1 + ( int )lgh );
scale = true;
}
else
{
nexth = m_height;
}
// wie üblich textur vorbereiten
glGenTextures( 1, &m_textureid );
glBindTexture( GL_TEXTURE_2D, m_textureid );
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
//das bild "skalieren" einfach den bereich der überflüssig ist mit schwarz auffüllen ;)
//m_u / m_v sind die texturcoordinaten, die man statt der 1 benutzen muss, damit das bild richtig geblittet wird.
if ( scale )
{
byte * array = new byte[nexth*nextw*4];
for ( int i = 0; i < m_height; i++ )
{
memcpy( ( void* ) &array[nextw*i*4],
( void * ) &data[m_width*i*4], m_width*4 );
}
m_u = ( float )m_width / ( float )nextw;
m_v = ( float )m_height / ( float )nexth;
glTexImage2D( GL_TEXTURE_2D, 0, 4, nextw, nexth, 0, GL_RGBA,
GL_UNSIGNED_BYTE, array );
}
else
{
m_u = 1;
m_v = 1;
glTexImage2D( GL_TEXTURE_2D, 0, 4, m_width, m_height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, data );
}
|
vielleicht hilft das ein wenig  |
|
Nach oben |
|
 |
Cyianor Super JLI'ler

Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 18.01.2004, 13:10 Titel: |
|
|
thx, vielen Dank |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|