JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

OpenGL Blend

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 16.01.2004, 13:50    Titel: OpenGL Blend Antworten mit Zitat

Hi,

Ich will mit OpenGL ein Bitmap auf den Bildschirm bringen. (Wie einfallsreich nich Wink )

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 Sad ...

Vision
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 16.01.2004, 15:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 16.01.2004, 18:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 16.01.2004, 19:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 17.01.2004, 18:01    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 18.01.2004, 13:10    Titel: Antworten mit Zitat

thx, vielen Dank
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum