Seite 1 von 1

Freetype font Ausrichtung nach textur rotation

Verfasst: 25.06.2012, 15:08
von snoob741
Hallo,

inzwischen habe ich es hin bekommen, Freetype Glyphen in eine Atlastextur zu rendern und mit Hilfe eines Spritebatchers (danke Schrompf) zu rendern. Soweit so gut. Nur leider ist es z.Z. so, dass die erstelten Texturen und die resultierenden Sprites im Freetype Style generiert wreden, d.h. der Ursprung ist die linke, obere Ecke ... Ich verwende Systemweit aber die linke untere Ecke als Ursprung.

Nun dachte ich mir, bist Du Fuchs und rotierst jedes Glyphbitmap bevor Du es in die Atlastextur packst. Ganz einfach, klappt auch bestens. Nur habe ich nun Probleme mit der Ausrichtung (hat vorher bestens geklappt) an der Baseline. Die Textur ist vertikal geflipt (auf x-Achse), die Ausrichtungsdaten die ich über Freetype bestimmt habe, orientieren sich natürich noch am Ursprung und erzeugen nun total verschobene Glyphen.

Code: Alles auswählen

        // Bestimmumg der ursprünglichen Daten aus der ft-bitmap
	glyph.setWidth(ft_bitmap_width);
        glyph.setHeight(ft_bitmap_rows);
	glyph.setOffsetX((float)ft_glyph_left);
	glyph.setOffsetY((float)ft_glyph_top);
	glyph.setAdvanceX(advanceX);
	glyph.setAdvanceY(advanceY);

        // urpüngliche sprite kalkulation
	float x0 = pen.m_fX + glyph.getOffsetX();
	float y0 = pen.m_fY + glyph.getOffsetY();

	float x1 = x0 + glyph.getWidth();
	float y1 = y0 - glyph.getHeight();            

	float s0 = region.getU(); 
	float s1 = region.getU2(); 
	float t0 = region.getV(); 
	float t1 = region.getV2(); 
		 
	 Vertex vertices[] = {
			Vertex(  x0, y0, 0.0f, s0, t0),
			Vertex(  x0, y1, 0.0f, s0, t1),
			Vertex(  x1, y1, 0.0f, s1, t1),
			Vertex(  x1, y1, 0.0f, s1, t1),
			Vertex(  x1, y0, 0.0f, s1, t0),
			Vertex(  x0, y0, 0.0f, s0, t0)
	};
Nachdem ich die Glyphtexturen geflippt habe, muß ich lediglich float y1 = y0 - glyph.getHeight(); von der Subtraktion zur Addition umbauen und mein Glyph wird cockwise gerendert, wie erwartet. Nur passt jetzt die Baseline nicht mehr. Ich habe versucht den Y Offset neu zu berechnen, indem ich nur das horizontaleYBearing wie in der Spezifikation definiert heranziehe ... klappt aber nicht ...

Irgendwie dreh ich mich hier im Kreis und finde Keine Lösung. Kann mir jemand von Euch einen Schlag auf den Hinterkopf geben? Denke ich irgendwie wieder einmal völlig verquer?

Re: Freetype font Ausrichtung nach textur rotation [SOLVED]

Verfasst: 26.06.2012, 13:32
von snoob741
So Onkel Snoob hat das Problem in den Griff bekommen :D

Um die Schrift korrekt auszurichten bediene ich mich nun einer Rotationsmatrix bevor ich die Glyphen generiere und rotiere alles um 180°, so dass die linke untere Ecke dem Ursprung entspricht. Problem ist nun, dass der Text natürlich spiegelverkehrt ist. Somit muß ich zusätzlich die Glyphen nach dem Rendern horizontal spiegeln um sie wieder korrekt auszurichten und den negativen AdvanceX Wert negieren um den Pen korrekt zu verschieben.

Da der Wert im OffsetX dem Wert nach der Rotation entspricht, und somit ebenfalls in die falsche Richtung läuft, muß ich zusätzlich diesen neu berechnen, indem ich auf die urspünglichen Metrics Werte zurückgreife ... (Ein negieren war hier nicht möglich, da ich nach ellen langem Vergleichen der Glyphdaten herausgefunden habe, dass dieser Wert abweichend vom Ursprung ist). Der OffsetY wert ist korrekt, aber negativ und muß lediglich wie der AdvanceX negiert werden und siehe da es läuft ...

Das ganze ist natürlich von hinten durch die Brust ins Auge :( Kennt jemand von Euch evtl. einen eleganteren Weg?