Problem mit Font



  • Hi, ich habe nun folgendes Problem.
    habe eine funktion, bzw mehrere, zum Ausgaben einer Font im OpenGL fenster.
    das funktioniert nun auch so weit, nur ist die Farbe, der schrift, total falsch und hab ka woran das liegen kann.
    ich lade die farb-werte in eine struktur, welche ich an eine funktion übergebe

    cFont.GetFontTexture("Font.bmp", tex);
    if(tex!=0)
    {
    	fc.r=1.0f;
    	fc.g=1.0f;
    	fc.b=1.0f;
    	cFont.SetFontTexture(tex);
    	cFont.BuildFont(fc, 1.f);
    }
    
    void Font::BuildFont(FontColor fColor, float Scale)
    {
    	float	cx;
    	float	cy;
    	GLuint  loop=1;
    	ListBase=glGenLists(256);
    	if(FontTexture != 0)
    	{
    		glBindTexture(GL_TEXTURE_2D, FontTexture);
    		for(loop=0; loop<256; loop++)
    		{
    			cx=float(loop%16)/16.0f;
    			cy=float(loop/16)/16.0f;
    			glNewList(ListBase+loop,GL_COMPILE);
    				glBegin(GL_QUADS);
    				glColor3f(fColor.r, fColor.g, fColor.b);
    					glTexCoord2f(cx, 1 - cy - 0.0625f);
    					glVertex2f(0,0);
    					glTexCoord2f(cx + 0.0625f, 1 - cy - 0.0625f);
    					glVertex2f(16 * Scale,0);
    					glTexCoord2f(cx + 0.0625f, 1 - cy);
    					glVertex2f(16 * Scale, 16 * Scale);
    					glTexCoord2f(cx, 1 - cy);
    					glVertex2f(0, 16 * Scale);
    				glEnd();
    				glTranslated(10*Scale,0,0);
    			glEndList();
    		}	
    	}
    }
    

    nun will ich den text ausgeben. unter diesem text liegt bereits eine andere farbe. das kann grün oder weiß sein.

    void Font::ShowText(int x, int y, int set, const char *Format, ...)
    {
    	char	text[256];
    	va_list	ap;
    	if(Format==NULL)
    		return;
    	va_start(ap, Format);
    	    vsprintf_s(text, Format, ap);
    	va_end(ap);
    	if(set>1)
    		set=1;
    	glEnable(GL_TEXTURE_2D);
    	glEnable(GL_BLEND);
    	glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
    	glBindTexture(GL_TEXTURE_2D, FontTexture);
    	glDisable(GL_DEPTH_TEST);
    	glMatrixMode(GL_PROJECTION);
    	glPushMatrix();
    	glLoadIdentity();
    	glOrtho(0,SCREEN_WIDTH,0,SCREEN_WIDTH,-1,1);
    	glMatrixMode(GL_MODELVIEW);
    	glPushMatrix();
    	glLoadIdentity();
    	glTranslated(x,y,0);
    	glListBase(ListBase-32+(128*set));
    	glCallLists(strlen(text),GL_UNSIGNED_BYTE,text);
    	glMatrixMode(GL_PROJECTION);
    	glPopMatrix();
    	glMatrixMode(GL_MODELVIEW);
    	glPopMatrix();
    	glEnable(GL_DEPTH_TEST);
    	glDisable(GL_BLEND);
    	glDisable(GL_TEXTURE_2D);
    }
    

    ist die funktion, welche den text ausgibt. wenn ich diesen nun in Rot möchte, wird er mir in gelb ausgegeben...was ja nun nicht so ganz das ist, was ich will 😉
    gebe ich ihn in schwarz aus, zeigt es mir garnix mehr an

    schlate ich jedoch in der funktion "ShowText" das blending aus, zeigt es mir die schrift in der richtigen farbe an. leider auch die schwarze box herum, welche ja mittels blending weg soll

    ich selber tippe ja auf einen fehler bei

    glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
    

    aber komme einfach nicht vorran 😞


Anmelden zum Antworten