Zeichenausgabe
-
Folgendes Problem(OPENGL): Ich möchte einen String an eine Funktion übergeben und diese wertet die Zeichen in einer for schleife aus und bringt die Pixel auf den Bildschirm:
GLvoid drawWord(char word[255]) { for(i=0;i<255;i++) { switch(word[i]) { case 'A': glBitmap(10,12,0,0,12,0,letterA); break; case 'B': glBitmap(10,12,0,0,12,0,letterB); break; case 'C': glBitmap(10,12,0,0,12,0,letterC); break; case 'D': glBitmap(10,12,0,0,12,0,letterD); break; case 'E': glBitmap(10,12,0,0,12,0,letterE); break; case 'F': glBitmap(10,12,0,0,12,0,letterF); break; case 'G': glBitmap(10,12,0,0,12,0,letterG); break; case 'H': glBitmap(10,12,0,0,12,0,letterH); break; case 'J': glBitmap(10,12,0,0,12,0,letterJ); break; case 'K': glBitmap(10,12,0,0,12,0,letterK); break; case 'L': glBitmap(10,12,0,0,12,0,letterL); break; case 'M': glBitmap(10,12,0,0,12,0,letterM); break; case 'O': glBitmap(10,12,0,0,12,0,letterO); break; case 'P': glBitmap(10,12,0,0,12,0,letterP); break; case 'R': glBitmap(10,12,0,0,12,0,letterR); break; case 'S': glBitmap(10,12,0,0,12,0,letterS); break; case 'T': glBitmap(10,12,0,0,12,0,letterT); break; case 'W': glBitmap(10,12,0,0,12,0,letterW); break; case ' ': glBitmap(10,12,0,0,12,0,letter_space); break; case 'U': glBitmap(10,12,0,0,12,0,letterU); break; } } /* for(i=0;i<255;i++) //funktionert nicht da zeichen komischerweise gelöscht //werden bevor sie ausgegeben werden :( { word[i]=NULL; } */ }Das Problem ist das wenn ich die Funktion drawWord("BLA") verwende, bleiben die Zeichen im nächsten durchlauf im buffer drin :(. Ich muss also den buffer nach jedem durchlauf säubern.
Hoffe mir kann jemand helfen oder kennt einen leichteren Weg.
-
Ich würde sowieso ausnutzen, dass "normale" String nullterminiert sind:
GLvoid drawWord(char word[255]) { int i = 0; while(word[i] != '\0') { switch(word[i]) { case 'A': glBitmap(10,12,0,0,12,0,letterA); break; case 'B': glBitmap(10,12,0,0,12,0,letterB); break; case 'C': glBitmap(10,12,0,0,12,0,letterC); break; case 'D': glBitmap(10,12,0,0,12,0,letterD); break; case 'E': glBitmap(10,12,0,0,12,0,letterE); break; case 'F': glBitmap(10,12,0,0,12,0,letterF); break; case 'G': glBitmap(10,12,0,0,12,0,letterG); break; case 'H': glBitmap(10,12,0,0,12,0,letterH); break; case 'J': glBitmap(10,12,0,0,12,0,letterJ); break; case 'K': glBitmap(10,12,0,0,12,0,letterK); break; case 'L': glBitmap(10,12,0,0,12,0,letterL); break; case 'M': glBitmap(10,12,0,0,12,0,letterM); break; case 'O': glBitmap(10,12,0,0,12,0,letterO); break; case 'P': glBitmap(10,12,0,0,12,0,letterP); break; case 'R': glBitmap(10,12,0,0,12,0,letterR); break; case 'S': glBitmap(10,12,0,0,12,0,letterS); break; case 'T': glBitmap(10,12,0,0,12,0,letterT); break; case 'W': glBitmap(10,12,0,0,12,0,letterW); break; case ' ': glBitmap(10,12,0,0,12,0,letter_space); break; case 'U': glBitmap(10,12,0,0,12,0,letterU); break; } ++i; } }In deinem vorherigen Code wurde i übrigens nie definiert (jedenfalls nicht in dem Teil, den du gepostet hast). Hab sonst erstmal keine Idee, woran es liegen könnte...
Felix
-
Ich hatte for kurzen mal was dazu in meinem Blog geschrieben:
http://jankuhnert.blogspot.com/2006/02/opengl-schrift-blend-und-layer.html