Einstieg OpenGL => Textausgabe

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Was müßte ich denn um- oder einstellen damit das bei mir auf Target Windows (Win32) läuft ?
Dateianhänge
Bildschirmfoto vom 2024-06-09 17-19-19.png
Bildschirmfoto vom 2024-06-09 17-19-19.png (104.73 KiB) 8662 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Ups .. jetzt dreht es das falsche Bitmap.

Aber macht nix, sieht ja auch irgendwie interessant aus ..

Screenshot (995).png
Screenshot (995).png (145.59 KiB) 8660 mal betrachtet
Dateianhänge
Test BitmapFont 2024-06-09.zip
(161.23 KiB) 53-mal heruntergeladen

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

Re: Einstieg OpenGL => Textausgabe

Beitrag von Frank Ranis »

Hi , lese hier einfach nur mit .

Und wundere mich , warum sich keiner mehr an meine Versuche mit Textausgabe in Opengl erinnert.
Hier ging es um die Nutzung von TTF-Fonts im Opengl.

Die ersten Versuche findet ihr hier:

Text in OpenGLcontrol Nov 2016
Startseite
viewtopic.php?f=25&t=10235
Seite mit fertiger DEMO
viewtopic.php?f=25&t=10235&start=30

und eine komplette Textausgabe hier:

Opengl Text , jetzt mit Ausgabe eines Strings März 2018
viewtopic.php?f=25&t=11498

Leider ist das schon etwas länger her und ich müsste mich selber erst wieder reindenken.

Gruß

Frank
www.flz-vortex.de

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Frank Ranis hat geschrieben: Mo 10. Jun 2024, 06:24 Hier ging es um die Nutzung von TTF-Fonts im Opengl.
Die ersten Versuche findet ihr hier:

Text in OpenGLcontrol Nov 2016 Startseite
viewtopic.php?f=25&t=10235
...
Leider ist das schon etwas länger her und ich müsste mich selber erst wieder reindenken.
Hallo Frank und Danke für den Hinweis auf Deine Threads von damals !

Werde ich mir mal in Ruhe durchlesen und die Sources herunterladen und ausprobieren.

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

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Was noch wichtig ist, was will man überhaupt machen.
Ein statischer Text, da steckt man am besten den ganzen in eine Bitmap.
Wen es ändern soll, nimmt man die oben beschriebenen Varianten.
Und noch was wichtig ist, was will man darstellen. die Zeichen von #32 - #127, oder will man sogar UTF8 was dann aber recht komplex wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: Mo 10. Jun 2024, 19:18 Was noch wichtig ist, was will man überhaupt machen.
Ein statischer Text, da steckt man am besten den ganzen in eine Bitmap.
Wen es ändern soll, nimmt man die oben beschriebenen Varianten.
Also ich habe schon vor, da erstmal nur einen statischen Text reinzupacken.
Aber die angezeigten Geräte-Daten (z.B. Temperaturen)
ändern sich natürlich mal, je nach Zustand der Anlage.

Hinzu kommen sollen dann später auch dynamische Balkenanzeigen,
ähnlich wie bei Pegel-Messern. Aber das ist dann schon die Kür.
Erstmal müssen die Basics funktionieren und gut aussehen.

Im Moment male ich in ein TImage, das hat natürlich so seine Grenzen,
gerade bei grafischen Elementen. Und wird natürlich von der CPU gerechnet ..

Mathias hat geschrieben: Mo 10. Jun 2024, 19:18 Und noch was wichtig ist, was will man darstellen. die Zeichen von #32 - #127, oder will man sogar UTF8 was dann aber recht komplex wird.
Tja, also die Umlaute und ein paar Sonderzeichen, z.B. für °C, werde ich schon brauchen ..

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Frank Ranis hat geschrieben: Mo 10. Jun 2024, 06:24 und eine komplette Textausgabe hier:

Opengl Text , jetzt mit Ausgabe eines Strings März 2018
viewtopic.php?f=25&t=11498
Hab's compiliert, auf meiner OnChip-Grafikkarte (liegt's daran ?) zittert die Schrift ein wenig.
Aber sowas dynamisches mit Text habe ich ja nicht vor zu machen.

Vielen Dank für den Code, da schaue ich mal tiefer rein !

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Einstieg OpenGL => Textausgabe

Beitrag von corpsman »

PeterS hat geschrieben: So 9. Jun 2024, 16:02
corpsman hat geschrieben: So 9. Jun 2024, 08:23 Da will ich doch glatt mal ein bisschen Werbung für meine uopengl_ascii_font machen. Die müsste können was ihr hier versucht ;)
Ah, hallo corpsman !

Von Dir hatte ich mir opengltruetypefont heruntergeladen, und unter Windows (Win32) compiliert.
Leider blieb Franz sein Taxi leer .. kein Text auf dem Fenster .. :-(


Screenshot (986).png
So hab mir das mal angesehen, die Demo ist da etwas unglücklich, du must die Textur erstellen (damit speicherst du sie ja ab) und dann noch mal von Hand laden, dass er sie auch anzeigt. Ich schau, dass ich die Demo anpasse und auf meinen Github entsprechend aktualisiere :).
--
Just try it

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Daumen hoch klein.png
Daumen hoch klein.png (4.03 KiB) 8622 mal betrachtet

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

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Diese Beispiel rendert den Text selbst im Shader.

Code: Alles auswählen

procedure TForm1.OutText(s: string);
var
  ci: array of TGLint = nil;
  CharOfs: array of TGLfloat = nil;
  len: SizeInt;
  i: integer;
  index: integer = 0;
begin
  glBindTexture(GL_TEXTURE_2D_ARRAY, textureID);
  len := Length(s);
  SetLength(ci, len);
  SetLength(CharOfs, len + 1);
  CharOfs[index] := 0;
  for i := 0 to len - 1 do begin
    ci[i] := uint32(s[i + 1]);
    Inc(index);
    CharOfs[index] := CharOfs[index - 1] + Canvas.TextWidth(s[i + 1]) / 12;
  end;
  glUniform1iv(UniformID.Chars, Length(ci), PGLint(ci));
  glUniform1fv(UniformID.CharsOfs, Length(CharOfs), PGLfloat(CharOfs));

  glBindVertexArray(VBQuad.VAO);
  glDrawArraysInstanced(GL_TRIANGLES, 0, 6, Length(ci));
end;

Code: Alles auswählen

#version 330

#define Instance_Count 255

uniform int chars[Instance_Count];
uniform float charsOfs[Instance_Count];
uniform mat4 mat;

out vec2 UV0;
out float layer;

const vec2 QuadVertex[] = vec2[] (
    vec2(0.0, 1.0), vec2(1.0, 0.0), vec2(0.0, 0.0),
    vec2(0.0, 1.0), vec2(1.0, 1.0), vec2(1.0, 0.0));

const vec2 TextureVertex[] = vec2[] (
    vec2(0.0, 0.0), vec2(1.0, 1.0), vec2(0.0, 1.0),
    vec2(0.0, 0.0), vec2(1.0, 0.0), vec2(1.0, 1.0));

void main(void)
{
  vec2 p2 = QuadVertex[gl_VertexID];
  vec4 p  = vec4(p2, 0.0, 1.0);
  p.x += charsOfs[ gl_InstanceID];

  gl_Position = mat * p;

  layer = chars[gl_InstanceID] - 32;

  UV0 = TextureVertex[gl_VertexID];
  UV0.y *= 1;
}
Die ganze Source findet man hier:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

So, das ganze ist jetzt eine Kombination von zwei Beispiel-Projekten ..

Screenshot (1000).png
Screenshot (1000).png (49.23 KiB) 8613 mal betrachtet
Dateianhänge
Test BitmapFont 2024-06-11.zip
(161.67 KiB) 60-mal heruntergeladen

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: Di 11. Jun 2024, 15:24 Die ganze Source findet man hier:
Ups .. missing link ..

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

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

PeterS hat geschrieben: Di 11. Jun 2024, 16:27
Mathias hat geschrieben: Di 11. Jun 2024, 15:24 Die ganze Source findet man hier:
Ups .. missing link ..
https://github.com/sechshelme/Lazarus-O ... _monospace
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Danke

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: Di 11. Jun 2024, 16:30 https://github.com/sechshelme/Lazarus-O ... _monospace
Kann es sein daß man FPC 3.3.1 braucht, damit das ganze kompiliert ?

BG Peter

Antworten