Texturempping zeigt nur ein weißes Rechteck
-
Worann kann das liegen?
Die Darstellungsfunktion ist folgende:
int cFont::print(float x, float y, float scale, const char *string) { int i, lo, hi; float sH, sL, rf = 1.0 / 16; glBindTexture(GL_TEXTURE_2D, texture); glEnable (GL_TEXTURE_2D); glBlendFunc(GL_ONE, GL_ONE); glEnable(GL_BLEND); glBegin(GL_QUADS); glColor4f (1.0,1.0,1.0,1.0); for (i = 0; i < strlen(string); i++) { lo = string[i] & 0x0f; hi = (string[i] & 0xf0) /16; sH = rf * (float)hi; sL = rf * (float)lo; glTexCoord2f(sH , sL); glVertex2f(x + (i * scale) , y ); glTexCoord2f(sH , sL - rf); glVertex2f(x + (i * scale) , y + scale); glTexCoord2f(sH - rf, sL - rf); glVertex2f(x + (i * scale ) + scale, y + scale); glTexCoord2f(sH - rf, sL); glVertex2f(x + (i * scale ) + scale, y ); } glEnd(); glDisable(GL_BLEND); glDisable (GL_TEXTURE_2D); }
Die Bilddatei ist ein Bitmap von 512 * 512 Pixeln und enthält 16 * 16 Zeichen (ASCII). Wer's noch nicht erraten haben sollte, ich will mir ne Font-Klasse bauen. Das Laden an sich klappt auch.
Die Main sieht folgendermaßen aus :
int main(int argc, char *argv[]) { SDL_Surface *screen , *image ; SDL_Event event; int quit = 0; cFont *font = new cFont("data/fonta.tga"); /* Initialize the SDL library */ if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } /* Clean up on exit */ atexit(SDL_Quit); /* * Initialize the display mode, * requesting a software surface */ SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 0 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 0 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 0 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); /* Screen Modes SDL_FULLSCREEN possible */ if ( ( screen=SDL_SetVideoMode( 640, 480, 32, SDL_OPENGL ) ) == NULL ) { fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError()); SDL_Quit(); return 1; } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); /* gameloop */ while(! quit) { SDL_PollEvent(&event); switch (event.type) { case SDL_QUIT: quit = 1; break; } font->print(0.0, 0.0, 0.4, "Ha"); SDL_GL_SwapBuffers(); } delete font; return 0; }
Wo ist mein Problem ?
Edit: Gibts eigentlich irgendwo nen "traps and pitfalls" für openGL?
-
es gibt ein glLastError oder so, das kann oft helfen.
rapso->greets();
-
das ist ja das Problem.. es gibt keinen Fehler...
Edit: Könnte es sein, dass es mit DEPTH zu tun hat??? was anderes fällt mir nicht ein, zumal ich das eigentlich auch schon mehr oder weniger ausprobiert hatte..
-
1.0 / 16 = Debugger
Bye, TGGC (Der Held lebt!)
-
hast du es schon ohne blend und ohne backface culling versucht? bist du dir sicher das die textur richtig geladen wurde?
rapso->greets();
-
1.0 / 16 ist durchaus in Ordnung, da der Compiler den ersten Konstantenwert als Referenz nutzt. 16 wird afaik ebenfalls als Gleitkommazahl interpretiert. Ich könnte auch 0.0625 als Konstante überall einsetzen - bring gaaarnix (außer ner Eingesparten float...)
Also ich culle derzeit garnichts (muss ich hier auch nicht, denk ich mal) das "glDisable(GL_BLEND)" bringt leider auch nix.
-
Ich habs gefunden.
Ich dachte mir zwar, dass es mit der Reihenfolge zu tun hat, aber nicht, dass es da lag. (wobei es logisch ist)Ich hab ganz am Anfang den Font geladen - noch bevor die SDL überhaupt initialisiert wurde..
trotzdem ist noch nen Fehler drin, was die TexCoords angeht, den bekomm ich aber leicht raus.
-
DocJunioR schrieb:
Edit: Gibts eigentlich irgendwo nen "traps and pitfalls" für openGL?
Ja gibt's. Irgendwo als PDF.
-
DocJunioR schrieb:
Ich hab ganz am Anfang den Font geladen - noch bevor die SDL überhaupt initialisiert wurde..
den fehler gab's hier schon öfter, dir hätte also nach "oGL texture problem" vielleicht rasch ne lösung gebracht.
rapso->greets();
-
DocJunioR schrieb:
trotzdem ist noch nen Fehler drin, was die TexCoords angeht, den bekomm ich aber leicht raus.
Ach wirklich? Wo könnte man die wohl am einfachsten überprüfen...
Bye, TGGC (NP Intelligenz)
-
TGGC schrieb:
DocJunioR schrieb:
trotzdem ist noch nen Fehler drin, was die TexCoords angeht, den bekomm ich aber leicht raus.
Ach wirklich? Wo könnte man die wohl am einfachsten überprüfen...
Bye, TGGC (NP Intelligenz)
Also du hast schon bissiger kommentiert - zumal ich dem Kommentar etwas Sinnfreiheit unterstelle..
-
Tja, bin wohl aus der Übung.
Bye, TGGC (Der Held lebt!)