ich brauche hilfe bei opengl : texturen



  • Ich bin nicht intolerant gegenüber anderen Betriebssystemen !
    Aber ich wollte damit nur zum Ausdruck bringen das ich der Philosophie von Linux und dem opensource gedanken voll und ganz zustimme , und das ich es ehrlich gesagt eine frechheit finde , wenn man in einem hilfeforum , die hilfe nur für geld anbietet !



  • Ach herrje, jetzt gehen diese kindischen Streitereien schon wieder los... 🙄



  • Datano schrieb:

    Ich bin nicht intolerant gegenüber anderen Betriebssystemen !

    Dann schreib nicht so ne Scheiße daher! Vielleicht guck ich heut mal nach.



  • nman schrieb:

    Ach herrje, jetzt gehen diese kindischen Streitereien schon wieder los... 🙄

    Eben, bringt doch nix.

    Bye, TGGC \-/



  • Datano schrieb:

    wenn man in einem hilfeforum , die hilfe nur für geld anbietet !

    Steht hier irgendwas von C++ Hilfe Forum?!? 😕

    Was meinst Du - grob geschätzt - zahlt Marc++us für Server, Administration, und Traffic?!? 😕



  • *lol*

    Oh mann.. Ist ja wiedermal die allgemeine Hilfsbereitschaft ausgebrochen...

    Beschreib mal das Problem etwas genauer. Wie willst Du die Texturen kombinieren? Multitexture? Wenn ja zeig doch einfach mal den Bereich wo Du die Texturen setzt und anzeigst. Die Texturen alleine werden ja angezeigt, oder?



  • Hallo !

    Danke durito , ich habe dieses Forum schon fast aufgegeben !

    Mein Problem ist , das ich 2 verschiedene Texturen laden will ,
    und einen Würfel mit der einen Textur und denn anderen mit der anderen Textur
    "bespannen" will .

    Ich will aber das nicht direkt so das im sinne von :

    if ((TextureImage[0]=LoadBMP("Data/logo.bmp")) &&
    	    (TextureImage[1]=LoadBMP("Data/mask1.bmp")) &&
    	    (TextureImage[2]=LoadBMP("Data/image1.bmp")) &&
    	    (TextureImage[3]=LoadBMP("Data/mask2.bmp")) &&
    	    (TextureImage[4]=LoadBMP("Data/image2.bmp"))){
    

    Laden , sondern dafür so eine Art "TexturLoader" funktion schreiben .
    Also einfach nur eine Funktion die einen vector<string> ein liest ( indem die Dateinamen sind ) und dann die Texturen speichert , damit ich sie aufrufen kann , damit wenn ich andere Texturen oder noch mehr laden will nicht immer die Stelle umschreiben muss sondern halt nur z.B. hinzufügen :

    texturfiles.push_back( "nochnetextur.bmp" );
    

    Ich habe mir darüber Gedanken gemacht wie ich sowas am besten hinbekomme und hab angefangen zu schreiben , bin aber daran verzweifelt , da die Texturen geladen wurden ( in GLuint texture ) , aber die Texturen immer die gleichen waren als ich sie mit :

    glBindTexture( GL_TEXTURE_2D , texture[0] );
    

    oder halt mit texture[1] ... benutzen wollte .

    Hier hier noch die Funktionen:

    loadgltextues:

    int loadgltextures(){
    
        SDL_Surface *textureimage[5]; 
    
    	for( int i = 0 ; i < texturefiles.size() ; i++ ){
    		if( !(textureimage[i] = SDL_LoadBMP( texturefiles[i].c_str() ) ) ){
    			cout << "konnte textur " << texturefiles[i].c_str() << "nicht laden" << endl;
    			return false;
    		}
    	}
    
    	texture = new GLuint[texturefiles.size()];
    	glGenTextures( texturefiles.size() , &texture[0] );
    
    	for( int i = 0 ; i < texturefiles.size() ; i++ ){
    		glBindTexture( GL_TEXTURE_2D , texture[i] );
    		glTexImage2D( GL_TEXTURE_2D , 0 , 3 , textureimage[i]->w,
    				  textureimage[i]->h , 0 , GL_BGR,
    				  GL_UNSIGNED_BYTE,
    				  textureimage[i]->pixels );
    		glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR );
    		glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR );
        }
    
        for( int i = 0 ; i < texturefiles.size() ; i++ ){
    		if( textureimage[i] ){
    	    	SDL_FreeSurface( textureimage[i] );
    		}
    	}
    
        return true;
    }
    

    und drawGLScene :

    bool drawGLScene(){
    
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    
    	//die erste figur
    		glLoadIdentity( );
    
        	glTranslatef( posx -3 , posy , posz );
    
    		glRotatef( anglex , 1.0f , 0.0f , 0.0f );
    		glRotatef( angley , 0.0f , 1.0f , 0.0f );
    		glRotatef( anglez , 0.0f , 0.0f , 1.0f );
    
        	glBegin( GL_QUADS );
          		glColor4f( 1.0f , 0.0f , 0.0f , 1.0f );
    			glBindTexture( GL_TEXTURE_2D , texture[0] );
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );	
        	glEnd( );
    
    	//die zweite figur
    		glLoadIdentity( );
    
        	glTranslatef( posx , posy , posz );
    
    		glRotatef( anglex , 1.0f , 0.0f , 0.0f );
    		glRotatef( angley , 0.0f , 1.0f , 0.0f );
    		glRotatef( anglez , 0.0f , 0.0f , 1.0f );
    
        	glBegin( GL_QUADS );
          		glColor4f( 0.0f , 1.0f , 0.0f , 0.5f );
    			glBindTexture( GL_TEXTURE_2D, texture[1] );
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );	
        	glEnd( );
    
    	//die zweite figur
    		glLoadIdentity( );
    
        	glTranslatef( posx +3 , posy , posz );
    
    		glRotatef( anglex , 1.0f , 0.0f , 0.0f );
    		glRotatef( angley , 0.0f , 1.0f , 0.0f );
    		glRotatef( anglez , 0.0f , 0.0f , 1.0f );
    
        	glBegin( GL_QUADS );
          		glColor4f( 0.0f , 0.0f , 1.0f , 1.0f );
    			glBindTexture( GL_TEXTURE_2D, texture[0] );
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f ,  1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f ,  1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f ,  1.0f , -1.0f );
    
    			glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 1.0f ); glVertex3f(  1.0f , -1.0f ,  1.0f );
    			glTexCoord2f( 1.0f, 0.0f ); glVertex3f(  1.0f , -1.0f , -1.0f );
    			glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -1.0f , -1.0f , -1.0f );	
        	glEnd( );
    
        SDL_GL_SwapBuffers( );
    
        frames++;
    
    	ticks = SDL_GetTicks();
    	if( ticks - ticksold >= 5000 ){
    	    seconds = (ticks - ticksold) / 1000.0;
    	    fps = frames / seconds;
    	    printf( "%d frames in %g seconds = %g FPS\n" , frames , seconds , fps );
    	    ticksold = ticks;
    	    frames = 0;
    	}
    
        return( true );
    }
    


  • Ich hab mein Problem selber gelöst !
    glBindTexture() ist zwischen glBegin() und glEnd() nicht erlaubt,
    habs davor hingeschrieben und jetzt geht es ohne Probleme !



  • Hi Datano,

    Sorry, meine Hilfe käme wohl etwas spät *g*
    Das glBegin/glEnd-Zeugs würd ich so wenn möglich vermeiden. Mach doch ne Displaylist, die ist schneller (ok, in diesem kurzen Prog merkt man das evt. nicht..) und Du brauchst nicht soviel copy&paste...



  • Was meinst du mit ner Displaylist?
    Hab den Begriff noch nie gehört...



  • yodas schrieb:

    Was meinst du mit ner Displaylist?
    Hab den Begriff noch nie gehört...

    Damit kannst Du OpenGL-Code zusammenfassen -> Einfacher fuer Dich zum coden und zudem unter Umstaenden nen grossen Performancegewinn.

    http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=12



  • durito schrieb:

    Einfacher fuer Dich zum coden und zudem unter Umstaenden nen grossen Performancegewinn.

    Und natürlich vollkommen out-dated weil es entsprechend neuere Sachen gibt die bei weitem schneller sind.



  • [ none] schrieb:

    durito schrieb:

    Einfacher fuer Dich zum coden und zudem unter Umstaenden nen grossen Performancegewinn.

    Und natürlich vollkommen out-dated weil es entsprechend neuere Sachen gibt die bei weitem schneller sind.

    was für Sachen?



  • durito schrieb:

    [ none] schrieb:

    durito schrieb:

    Einfacher fuer Dich zum coden und zudem unter Umstaenden nen grossen Performancegewinn.

    Und natürlich vollkommen out-dated weil es entsprechend neuere Sachen gibt die bei weitem schneller sind.

    was für Sachen?

    Vertex/Index Buffer

    Vertex Buffer Objects (VBOs)



  • Hm, ich glaub da ist bei mir noch einiges an Aufklärungsarbeit notwendig *g*

    Ok, mittels dem Vertex Buffer werden Geometrie-Daten direkt auf GraKa-Speicher abgelegt. Wo ist da der Unterschied zu DisplayLists, werden dabei nicht auch die Daten auf der GraKa abgelegt? Wenn nein, sind DiplayLists nur schneller weil gewisse Sachen vorkompiliert werden können?



  • durito schrieb:

    Hm, ich glaub da ist bei mir noch einiges an Aufklärungsarbeit notwendig

    Nee, aber hier ist etwas Eigeninitiative nötig.

    Bye, TGGC (Denken, und gut ist.)



  • Sorry, dass ich den alten Thread nochmals ausgrabe..

    Hab grad im redd book zu display lists gelesen: "some graphics hardware may store display lists in dedicated memory ..."

    Uhm, also wird damit die Geometrie auch mit display lists auf dem GraKa-Speicher abgelegt (kommt jetzt wohl drauf an, was "some graphics hardware" ist.. *g*)?


  • Mod

    displaylists optimieren aber viel mehr, sie reduzieren stateswitches, ändern die reihenfolge mancher kommandos falls das resultat gleich bleibt und es optimaler ist, sie führen frustumculling durch uvm.

    rapso->greets();



  • Ja das ist klar, aber wenn display list optimiert UND Daten auf dem GraKa-Speicher ablegt, warum sollen denn VBOs schneller sein als display lists?

    ... entsprechend neuere Sachen gibt die bei weitem schneller sind.



  • Weil die Uhr das so anzeigt. Garantie gibts sicher nicht.

    Bye, TGGC (Pipe my World.)


Anmelden zum Antworten