Das is wie gesagt sehr Performanz raubend. Also dacht ich mir, gibste den Text in einen Schwung aus und machst die ortho sachen etc. nur einmal.
Jetzt sieht meine Procedure so aus:
Code:
procedure PrintTextE(TextPosX, TextPosY: GLuint; Text:string; R,G,B :single; Typ :byte);
//Gibt den String in \"Text\" an der Stelle (TextPosx, TextPosy) in der Farbe, die RGB ergibt und der Schrift \"Typ\"aus
// Funktioniert nur, wenn außerhalbd er Procedure alle nötigen Einstellungen gemacht wurden (siehe PrintText() )
begin
glColor3f(R,G,B);
glRasterPos2i(TextPosX, TextPosY);
glPushAttrib(GL_LIST_BIT);
case typ of0: glListBase(GVFontMC22);
1: glListBase(GVFontMC30);
2: glListBase(GVFontCN20)
else glListBase(GVFontSS16);
end;
glCallLists(Length(Text), GL_BYTE,Pointer(Text));
glPopAttrib;
end;
(Der Teil der gegenüber obiger Version Fehlt muss jetzt per hand beim Aufruf eingefügt werden. Dafür aber nur einmal.)
Leider is das aber noch net schnell genug. Ich will mehr!! Mein (Selbstgezeichneter) Cursor ruckelt sobald (20 Zeilen) Text angezeigt wird. Hat jemand ne optimierungs Idee, oder bessere Version parat?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Einfach die Quads mit den entsprechenden Texturkoordinaten zeichnen (die Breite eines Schriftzeichens = x2 - x1, die Breite der Quads sollte halbwegs proportional dazu sein), und fertig ist das Ganze und läuft auch sehr schnell.
Wenn du ganz optimieren möchtest, machst du bei einem String Folgendes:
Code:
glBegin(GL_QUADS)
zeichne hier alle Zeichen mit glTexCoord und glVertex Kommandos
glEnd;
anstelle einzelne glBegin/glEnd Blöcke zu verwenden, sollte aber auch ohne diese Optimierung locker schnell genug sein.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das Zeichnen von Texturierten Quads is schneller als die Fonts die ich verwende? @Mars: das muss ich mir erst mal angucken... Is dass denn mit ner menge schreibarbeit verbunden. Ich muss ja erstmal rausfinden welcher buchstabe und dann muss ich den entsprechenden Buchstaben mit Quad zeichnen. Und was mach ich wenn ich ne spezielle Farbe haben will? Weise Buchstaben und dann mit glColor3f() ?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ja - texturierte Quads (oder Trianglestrips) sind so ziemlich der schnellste Weg Zeichen darzustellen - ist ja auch logisch, da sämtliche aktuellen 3D-Beschleuniger dahingehend optimiert sind, texturierte Dreiecke möglichst schnell darzustellen.
Der Code ist sogar einfacher als der, den du jetzt verwenderst - ich poste mal die Routine, die ich verwende, um Text mit verschiedenen Zeichensätzen und Zeilenumbrüchen auszugeben:
Code:
procedure TFramework.Write(s: String);
var
x, y: float;
w, h: float;
i: integer;
c: byte;
fnt: PTexFont;
begin
if (ActiveFont<Fonts) and (Font[ActiveFont]<>NIL) then
XScale und YScale sind normalerweise 1 - ich finde es aber angenehm auf diese Weise schnell "große und kleine" Schriften zu bekommen, ohne mit der ModelView Matrix herumkaspern zu müssen.
Farben kannst du tatsächlich mit glColor Kommandos einstellen, oder du verwendest den generierten Font als Alphamaske einer anderen Textur, oder du bearbeitest das Ganze in einem Bildbearbeitungsprogramm - die Koordinaten ändern sich dadurch ja nicht (nicht mal wenn du das Bild vergrößerst oder verkleinerst, da Texturkoordinaten immer zwischen 0 und 1 liegen).
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.