ich brauche hilfe bei opengl : texturen



  • Hallo !

    Ich versuche schon die letzten Tage verzweifelt 2 unterschiedliche Texturen gleichzeitig anzeigen zu lassen , aber egal was ich mache , es wird immer nur die eine angezeigt und die andere durch die erste ersetzt!
    Hab schon x tausend mal die NEHE Tuts gelesen , aber irgendwie klappts bei mir nicht mehr wenn ich es ein bisschen umschreibe .

    Da ich nicht weiss wo sich der Fehler befindet , und der quelltext ziemlich lang ist , hier ein archiv http://www.skopionmaster.net/test.zip ( 26kb ) .

    ich hoffe mir kann jemand helfen
    MFG datano



  • Wieviel zahlst du denn?

    Bye, TGGC \-/



  • war das ernst gemeint ?



  • Ja, für Geld würde ich dir ein Programm umschreiben.

    Bye, TGGC \-/



  • Nein Danke !!!
    Ich versuche zu verstehen wo mein Problem liegt und will es mir nicht wegkaufen !



  • linux4life !
    Ist jemand anderes bereit mir zu helfen ?



  • Datano schrieb:

    linux4life!

    Nö, wegen Intoleranz zu anderen Betriebssystemen wie z.B. Sun oder MacOS sowie Windows und einem Linuxkiddiebenehmen, jetzt nicht mehr. Hatte vor diesem Post jedoch in erwähgung gezogen den Fehler zu beheben, aber so nicht.



  • 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?


Anmelden zum Antworten