Opengl Text , jetzt mit Ausgabe eines Strings

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Frank Ranis »

Hallo,

ich habe mal an meiner Opengl Text Geschichte weiter gebastelt.
Jetzt mit Ausgabe von kompletten String's.

Solange es das neue Forum noch nicht gibt , lege ich die Files mal auf meiner Hompage ab.
http://www.flz-vortex.de/LAZ_OPENGL_TEX ... GL_TEXT.7z

Einfach mal anschauen und spielen.

Gruß

Frank
www.flz-vortex.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Mathias »

Ich wollte, es probieren, aber so wie es scheint, läuft dies nur unter Windows.
Dein dglOpenGL.pas würde ich mit der neusten Version ersetzten, ansonsten geht gar kein OpenGL unter Linux. :wink:
Du hast eine Version erwischt, welche mit TRect Probleme hat.


PS: Ich habe deine Zeile 130 in der unti1 ein wenig angepasst, jetzt läuft es auch mit Linux.

Code: Alles auswählen

 hauptpfad := ExtractFilePath(ParamStr(0));


PS2:

Code: Alles auswählen

const charlist='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'+  // Standard
               'äÄüÜöÖß?.,-#/\!\"%&()='' :;<>{}[]@€+-*'+                          // Sonderzeichen
               'ΑαΒβΓγγχΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσΤτΥυΦφΧχΨψΩω';              // Griechisches Alphabet   

Hier kannst du problemlos alle ASCII-Zeichen von #32 bis #127 aufnehmen.
Bei dir fehlt zB. das $.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von wp_xyz »

Wenn du das dglOpenGL durch die Units gl und glu ersetzt, die mit FPC mitkommen, und in FormCreate das zugehörige "InitOpenGL", "ReadExtensions", "ReadImplementationProperties" entfernst, dann läuft es auch unter Linux, und auf Rechnern mit schmalbrüstigem OpenGL (wie meinem). Das heißt "fast", denn den Backslash, den du in FormCreate an den "hauptpfad" anhängst, musst du durch einen normalen Slash ersetzen, oder am besten gleich "PathDelim" nehmen, das geht in beiden Welten.

Code: Alles auswählen

uses  [...], OpenGLContext, gl, glu, //dglOpenGL, [...];   // auch aus der Triangulations-Unit und dem Projekt entfernen.
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 zaehler:=1;
 zdiff:=0.2;
 z:=-3;
 
 hauptpfad:=extractfiledir(paramstr(0))+PathDelim;
 
 // Opengl init
 //InitOpenGL;
 OpenGLControl.MakeCurrent;
 //ReadExtensions;
 //ReadImplementationProperties;
 
 // Fontliste erzeugen
 FreeSans_triangle_font.fontfile:=hauptpfad+'FreeSans.ttf';
 FreeSans_triangle_font.UTF8_Charlist:=charlist;
 FreeSans_triangle_font.erzeuge;
end;

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Mathias »

Wenn du das dglOpenGL durch die Units gl und glu ersetzt, die mit FPC mitkommen

Ich mache alles mit dieser Unit, die ist viel aktueller als gl unf glu.

Code: Alles auswählen

, und in FormCreate das zugehörige "InitOpenGL", "ReadExtensions", "ReadImplementationProperties" entfernst, dann läuft es auch unter Linux, und auf Rechnern mit schmalbrüstigem OpenGL (wie meinem).
Altes OpenGL wird auch mit der neusten Version unterstützt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Frank Ranis »

Hallo ,

Mathias hat geschrieben:Dein dglOpenGL.pas würde ich mit der neusten Version ersetzten, ansonsten geht gar kein OpenGL unter Linux. :wink:
Du hast eine Version erwischt, welche mit TRect Probleme hat.

PS: Ich habe deine Zeile 130 in der unti1 ein wenig angepasst, jetzt läuft es auch mit Linux.

Code: Alles auswählen

 hauptpfad := ExtractFilePath(ParamStr(0));


PS2:

Code: Alles auswählen

const charlist='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'+  // Standard
               'äÄüÜöÖß?.,-#/\!\"%&()='' :;<>{}[]@€+-*'+                          // Sonderzeichen
               'ΑαΒβΓγγχΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσΤτΥυΦφΧχΨψΩω';              // Griechisches Alphabet   

Hier kannst du problemlos alle ASCII-Zeichen von #32 bis #127 aufnehmen.
Bei dir fehlt zB. das $.


Irgendwie schaffe ich es immer , das ich eine veraltete dglOpenGL.pas habe .
Die geistert überall auf meinem Rechner rum und dann schnapp ich sie mir einfache und unter WINDOWS läuft es und dann mach ich mir keine Gedanken um Linux , weil ich davon keinen Schimmer habe.

Danke für das $-Zeichen .
Ist schon klar , das man sich den Ascii-Zeichensatz via Schleife von #32 bis #127 holen könnte.
Mir ging es aber auch um diverse Sonderzeichen , die teils weit ab in der Unicode-Tabelle abgelegt sind.
Und wenn man dann die komplette Unicode-Tabelle in Tiangulierter Form als Display-Liste erzeugen würde gäbe es
1) eine Speicherverschwendung sondergleichen
2) eine unerträgliche Wartezeit in der Create-Phase , wegen der nötigen Triangulierung der Zeichen.
Und mit meiner Char-Konstenliste nehme ich nur die Zeichen , die ich auch wirklich verwenden möchte.

wp_xyz hat geschrieben:

Code: Alles auswählen

uses  [...], OpenGLContext, gl, glu, //dglOpenGL, [...];   // auch aus der Triangulations-Unit und dem Projekt entfernen.
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 zaehler:=1;
 zdiff:=0.2;
 z:=-3;
 
 hauptpfad:=extractfiledir(paramstr(0))+PathDelim;
 
 // Opengl init
 //InitOpenGL;
 OpenGLControl.MakeCurrent;
 //ReadExtensions;
 //ReadImplementationProperties;
 
 // Fontliste erzeugen
 FreeSans_triangle_font.fontfile:=hauptpfad+'FreeSans.ttf';
 FreeSans_triangle_font.UTF8_Charlist:=charlist;
 FreeSans_triangle_font.erzeuge;
end;



Das mit dem 'PathDelim' hatten wir ja schon in meinem ersten Beitrag zu den Opengl-Chars .
viewtopic.php?f=25&t=10235
Ich bin halt so vergesslich und weil ich mit Linux noch nichts am Hut habe , ist das wieder untergegangen.

Ist aber schön , das ihr das Demo mit so ein paar kleineren Änderungen zum Laufen bekommen habt.

Aber was haltet ihr den allgemein von dieser Vorgehensweise (mit den triagulierten Zeichensätzen in Displaylisten) , brauchbar oder nicht ?

Mathias , wäre das nicht auch ein Seite wert , für dein Opengl 3.3 Tutorial?

Die beiden Units (BeRoTriangulation.pas und clipper.pas) kann man auch durch andere Triangulierungs-Routinen ersetzen , wenn man was einfacheres zur Verfügung hat.
Hier geht es ja nur darum , die Polygone , die man aus den Fonts bekommt in Dreieck zu konvertieren um die Ausgabe per Opengl möglich zu machen.

Gruß

Frank
www.flz-vortex.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Mathias »

Irgendwie schaffe ich es immer , das ich eine veraltete dglOpenGL.pas habe .

Dieses hier ist die neuste Version und unterstützt sogar OpenGL 4.6.

https://github.com/SaschaWillems/dglOpenGL/blob/master/dglOpenGL.pas

Ich würde mal die HD nach allen dglOpenGL.pas durchsuchen und alle löschen. Die neuste Version kannst dann in deinen Unit-Pfad aufnehmen.

Mathias , wäre das nicht auch ein Seite wert , für dein Opengl 3.3 Tutorial?

Gllisten gibt es hier nicht mehr. Aber man könnte die Koordinaten in eine Vertex-Array speichern.
Wen ich mal Zeit und Lust habe, kann ich deine Unit mal genauer angucken, soviel ich weis, hast du die auch von irgendwo kopiert.
Vielleicht kann man da noch etwas abspecken.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Opengl Text , jetzt mit Ausgabe eines Strings

Beitrag von Frank Ranis »

Hallo Mathias,

Mathias hat geschrieben:
Irgendwie schaffe ich es immer , das ich eine veraltete dglOpenGL.pas habe .

Dieses hier ist die neuste Version und unterstützt sogar OpenGL 4.6.

https://github.com/SaschaWillems/dglOpenGL/blob/master/dglOpenGL.pas

Ich würde mal die HD nach allen dglOpenGL.pas durchsuchen und alle löschen. Die neuste Version kannst dann in deinen Unit-Pfad aufnehmen.

Mathias , wäre das nicht auch ein Seite wert , für dein Opengl 3.3 Tutorial?

Gllisten gibt es hier nicht mehr. Aber man könnte die Koordinaten in eine Vertex-Array speichern.


danke für den LINK zur aktuellen dglOpenGL.pas .

Nach der Triangulation mit BeRoTriangulation.pas sind ja die Buchstaben nur noch eine Sammlung von Dreiecken und die müßten dann in dein vertex-array rein.

soviel ich weis, hast du die auch von irgendwo kopiert.


clipper.pas ist von Angus Johnson
BeRoTriangulation.pas von Benjamin Rosseaux , der übrigens auch in der Autorenliste von dglOpenGL.pas zu finden ist.
Und um an die Polyon-Daten der Fonts zu kommen benutze ich EasyLazFreeType (Bestandteil von LAZ) .

Die anderen Units habe ich gebastelt .

Gruß

Frank
www.flz-vortex.de

Antworten