TGALoader für OpenGL

3D-Visualisierung mit der Open Graphics Library (OpenGL)
paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: TGALoader für OpenGL

Beitrag von paparoach777 » Mi Jan 26, 2011 4:39 pm

klar hab ich schon gemacht.

wobei...
Bevor oder nachdem man die texture geladen hat ???
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8507
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: TGALoader für OpenGL

Beitrag von Xin » Mi Jan 26, 2011 4:52 pm

paparoach777 hat geschrieben:klar hab ich schon gemacht.

wobei...
Bevor oder nachdem man die texture geladen hat ???
Vor dem Zeichnen.

Ich kenne Deinen Quelltext nicht und der vorherige hatte wohl noch nichts mit Texturen zu tun.
Es ist nur der übliche Fehler, irgendetwas nicht zu "enable"'n ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: TGALoader für OpenGL

Beitrag von paparoach777 » Mi Jan 26, 2011 5:46 pm

das vor dem zeichnen war mir schon klar...

Ich meinte vor dem Laden oder danach ( in meinem Code also vor oder nach LoadTGA )
return EXIT_FAILURE;

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: TGALoader für OpenGL

Beitrag von Kerli » Do Jan 27, 2011 4:09 pm

paparoach777 hat geschrieben: Ich meinte vor dem Laden oder danach ( in meinem Code also vor oder nach LoadTGA )
Das ist eigentlich egal, da OpenGL ja nichts anderes als eine große Statemachine ist. Solange du es nicht änderst, bleibt es immer gleich. Einen Einfluss hat es erst beim Rendern. Es sollte also irgendwann vor dem Rendern aktiviert werden.
paparoach777 hat geschrieben:Aber auf dem Bildschirm ist nur ein schwarzes Quadrat...
Welche Farbe sollte es denn haben? Ist das genau die Farbe die du mit glColor angegeben hast? Bist du sicher das der TGA Loader funktioniert - also dass die Daten genau in dem Format vorliegen das du bei glTexImage angibst?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: TGALoader für OpenGL

Beitrag von paparoach777 » Fr Jan 28, 2011 11:38 pm

Also...

Die Farbe war standart weiss (hab ich überprüft).

Und das war ja eigentlich ein Projekt um zu gucken ob der TGALoader überhaupt funktioniert, also könnts daran liegen...

Hier der TGALoader SourceCode

Code: Alles auswählen

#include<stdio.h>
#include<stdlib.h>
#include"GLheaders.h"


typedef struct{
	char IDsize;
	char colormaptype;
	char imagetype;
	unsigned short colormapstart;
	unsigned short colormaplength;
	unsigned char colormapbits;
	unsigned short xstart;
	unsigned short ystart;
	unsigned short width;
	unsigned short height;
	char bpp;
	char descriptor;
}TGA_HEADER;


GLbyte* LoadTGA(const char *szFileName, GLint *iWidth, GLint *iHeight, GLint *iComponents, GLenum *eFormat){
	
	FILE *data;
	TGA_HEADER header;
	unsigned long imageSize;
	short depth;
	GLbyte *pbits;
	
	//default
	*iWidth = 0;
    *iHeight = 0;
    *eFormat = GL_BGR_EXT;
    *iComponents = GL_RGB8;
	
	data = fopen(szFileName, "rb");
	
	if(data == NULL){
		return NULL;
	}
	
	fread(&header, 18, 1, data);
	
	*iWidth = header.width;
	*iHeight = header.height;
	depth = header.bpp / 8;
	
	if(header.bpp != 8 && header.bpp != 24 && header.bpp != 32){
		return NULL;
	}
	
	imageSize = header.width * header.height * header.bpp;
	
	pbits = (GLbyte*)malloc(imageSize * sizeof(GLbyte));
	
	if(pbits == NULL){
		return NULL;
	}
	
	if(fread(pbits, imageSize, 1, data) != 1)
		{
        free(pbits);
        return NULL;
		}
	
	switch(depth)
		{
        case 3:     // Most likely case
            *eFormat = GL_BGR_EXT;
            *iComponents = GL_RGB8;
            break;
        case 4:
            *eFormat = GL_BGRA_EXT;
            *iComponents = GL_RGBA8;
            break;
        case 1:
            *eFormat = GL_LUMINANCE;
            *iComponents = GL_LUMINANCE8;
            break;
		};
		
		fclose(data);
		
		return pbits;
}

return EXIT_FAILURE;

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: TGALoader für OpenGL

Beitrag von Kerli » Sa Jan 29, 2011 3:48 pm

Du kannst ja einmal ein paar Debugausgaben machen und somit einmal schauen ob zum Beispiel sinnvolle Werte für die Größe, Farbtiefe etc. ausgelesen werden. Ansonsten wenn du ein Komplettes Pakete zusammenstellst, am Besten mit Makefile, dann kann ich mir das einmal kurz anschauen.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten