1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Wie lade ich Images für den Gebrauch als Textur in OpenGL?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von theonehimself, 03.02.06.

  1. Tach zusammen...
    Wie kann ich mit Carbon Images (wie z.B. jpg, bmp, tiff...) laden, die ich anschließend in Texturen für meine OpenGL Anwendungen umwandeln kann? Ich hab es mit Referenzen-Wälzen probiert, aber zu diesem doch eher simplen Problem nichts brauchbares gefunden. Kann mir jemand ein paar Tips geben? Welches API kommt in Frage? Tutorials?
     
  2. Binary

    Binary Gast

    Hi,

    ich glaube Carbon selbst stellt keinen Imageloader zur Verfügung.

    Du kannst entweder eine der zahlreichen freien Libs verwenden, z.B.
    http://freeimage.sourceforge.net/

    oder selbst einen Loader schreiben. Tutorials solltest du unter der
    Nummer 1. Addresse in OpenGL Fragen finden:
    http://nehe.gamedev.net/ :)

    Lg
     
  3. Der gute alte NeHe... Die Seite war ne Zeit lang mein zweites Zuhause. Hab da meinen Loader für BMPs her. Hat mich ne halbe Nacht gekostet das Ding. Problem war die Endianness. Bis ich da alle Bytes richtig gedreht hatte... gruselig sowas.
    Ich glaube mit QuickTime komme ich inzwischen etwas voran. Ich denk mal das deckt die meisten Formate ab. Hab nur schon Angst vor der Dokumentation... Da gibt es nicht zufällig ein paar einfache Tutorials, die sich nur mit dem Laden von Images befassen?
     
  4. Cortex85

    Cortex85 Gast

    Hier hätte ich noch eine - in C++ übersetzte Fassung - von NeHe's Targa-Loader (der ursprünglich in C geschrieben war, und den ich dann nach C++ übersetzt hab (mit einiger Hilfe der Targa-Dateiformatspezifikation von wotsit.org. Kann allerdings nur unkomprimierte Targas. Für das Laden komprimierter Targas schau lieber in die Spezifikation.

    Code:
    char * LadeTGA(const char * filename)
    {
    	char TGAheaderSample[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Header fuer unkomprimierte TGA mit Truecolor
    	char TGAcompare[12]; // Vergleichsarray
    	char header[6]; // enthaelt die wichtigsten Bytes 
    	GLuint bytesPerPixel; 
    	GLuint imageSize;
    	GLuint temp;
    //	GLuint type = GL_RGBA;
    	
    	GLuint width;
    	GLuint height;
    	GLuint bitsPerPixel;
    	char * imageData = NULL;
    	
    	ifstream file(filename, ios_base::binary);
    	
    	
    	file.read(TGAcompare, 12);
    	
    	using std::cout;
    	
    	int i=0;	
    	int counter = 0;
    	do
    	{
    		i++;
    		if (TGAcompare[i] == TGAheaderSample[i])
    			counter++;
    			
    		cout<<TGAheaderSample[i]<<std::endl;
    	}
    	while (i < 12);
    	
    /*
    	if (i != counter)
    	{
    		file.close();
    		return NULL;
    	} */
    	
    	file.read(header, 6);
    	
    	width = header[1]*256 + header[0];
    	height = header[3]*256 + header[2];
    	
    	if (width <= 0 || height <= 0 || (header[4] != 24 && header[4] != 32))
    	{
    		file.close();
    		return NULL;
    	}
    	
    	bitsPerPixel = header[4];
    	bytesPerPixel = bitsPerPixel / 8;
    	imageSize = width*height*bytesPerPixel;
    	
    	imageData = new char[imageSize];
    	file.read(imageData, imageSize);
    	
    	tgaBreite = width;
    	tgaHoehe = height;
    	
    	for (int i=0; i<imageSize; i+= bytesPerPixel)
    	{
    		temp = imageData[i]; // 3eckstausch
    		imageData[i] = imageData[i+2];
    		imageData[i+2] = temp;
    	}
    	
    	file.close();
    	return imageData;
    	
    }
    
    
    edit: nicht vergessen fstream.h zu inkludieren ;)
     

Diese Seite empfehlen