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


Anmelden zum Antworten