Einstieg OpenGL => Textausgabe

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
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 »

Code geputzt und hübsch gemacht ..
Dateianhänge
Test BitmapFont 2024-06-07.zip
(160.31 KiB) 46-mal heruntergeladen

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 »

Ich habe dein Code ein wenig modifiziert. Es bringt nichts die Textur bei jedem Paint-Durchgang neu ins VRAM zu laden.
Dies muss nur beim wechseln der Texture geschehen.

Code: Alles auswählen

procedure TForm1.OpenGLControl1Paint(Sender: TObject);
begin
  // GL clear screen
  glLoadIdentity;
  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  ////glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  ////glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//  glDisable(GL_TEXTURE_2D);
  glClearColor(0, 0, 0, 1);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  // GL preparation
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  glEnable(GL_TEXTURE_2D);
  glEnable(GL_BLEND);
  glEnable(GL_DEPTH_TEST);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//  glTexImage2D( GL_TEXTURE_2D, 0, 4, FontBitmap.Width, FontBitmap.Height, 0,
//                GL_RGB, GL_UNSIGNED_BYTE, FontBitmap.RawImage.Data);

Code: Alles auswählen

procedure TForm1.RadioGroup1SelectionChanged(Sender: TObject);
begin
  FontBitmap.Free;
  case RadioGroup1.ItemIndex of
  0: begin
       FontBitmap:= LoadFontBitmap;
       Image1.Picture.Bitmap.Assign( FontBitmap);
       CheckBox1.Visible:= FALSE;
     end;
  1: begin
       FontBitmap:= CreateFontBitmap;
       Image1.Picture.Bitmap.Assign( FontBitmap);
       CheckBox1.Visible:= TRUE;
     end;
  end;
  glTexImage2D( GL_TEXTURE_2D, 0, 4, FontBitmap.Width, FontBitmap.Height, 0,
                GL_RGB, GL_UNSIGNED_BYTE, FontBitmap.RawImage.Data);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  //glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  //glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glDisable(GL_TEXTURE_2D);
end;
glBindTextures fehlt auch, gucke mal dazu mein Beispiel an.
Man kann mehrere Texturen ins VRAM laden, un jede Textur bekommt eine ID.
Das wird man spätesten brauchen, wen man mehr als eine Textur in der Scene hat.
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 »

Wenn ich die Änderungen so mache wie Du gezeigt hast,
ist kein Font sichtbar direkt nach dem Programmstart.
Es werden nur weiße leere Rechtecke "gemalt", ins OpenGL-Fenster.

Erst wenn ich den Font wechsle, mit clicken auf den anderen RadioButton .. :(

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 »

Ich habe da noch was anderes Probiert. Jedes Zeichen bekommt eine eigene TexturID.
Wenn ich die Änderungen so mache wie Du gezeigt hast,
ist kein Font sichtbar direkt nach dem Programmstart.
Es werden nur weiße leere Rechtecke "gemalt", ins OpenGL-Fenster.
Da wird es etwas verschluckt haben.
Dateianhänge
lazarus_opengl_font.zip
(71.89 KiB) 45-mal heruntergeladen
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: Sa 8. Jun 2024, 08:55 ZIP-Datei ..
Dreht sich schön, ruckelt (Fenster maximiert) aber auf meiner lahmen On-Chip-Grafikkarte .. :(


Ganz abseits vom Open-GL-Sourcecode habe ich aber eine andere Frage zu Deinem Beispiel:

- die EXE startet aus Lazarus heraus nicht. Stattdessen das:
Screenshot (624).png
Screenshot (624).png (17.34 KiB) 7413 mal betrachtet

Und dann das :
Screenshot (625).png
Screenshot (625).png (10.95 KiB) 7413 mal betrachtet

Vielleicht weil Du am Ende das OpenGL-Objekt nicht "free"st .. ?
Zuletzt geändert von PeterS am Sa 8. Jun 2024, 12:36, insgesamt 3-mal geändert.

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 »

Die EXE direkt gestart, außerhalb von Lazarus, läuft ja ..
Screenshot (626).png
Screenshot (626).png (7.91 KiB) 7412 mal betrachtet

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: Sa 8. Jun 2024, 08:55 Jedes Zeichen bekommt eine eigene TexturID.
Das muss ich mir näher anschauen.
Bin aber gleich weg, für den Rest des Tages ..


In meinem letzten Code hatte ich schonmal geschaut,
wie man die Breite des "gemalten" Zeichens in der Bitmap ermitteln kann.
Und für jedes einzelne Zeichen in einem Array gespeichert.

Code: Alles auswählen

    // TextOut() schreibt einen String beginnend beim Punkt (X,Y) auf die Zeichenfläche
    // und setzt die neue Stiftposition auf das Ende des Strings.
    ..
    FontCharWidth[i]:= Result.Canvas.PenPos.X -x;
Dann könnte man (irgendwie ..) die proportionalen Zeichenabstände in OpenGL nachbilden.

Im Moment werden ja alle Zeichen, egal wie breit sie sind, in konstantem Abstand in das OpenGL-Objekt "gemalt".

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 »

Dann könnte man (irgendwie ..) die proportionalen Zeichenabstände in OpenGL nachbilden.
Im Moment werden ja alle Zeichen, egal wie breit sie sind, in konstantem Abstand in das OpenGL-Objekt "gemalt".
Dies müsste theoretisch möglich sein.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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 »

Unter Linux sieht es schon mal schön aus.

Nur bei Windoof will es nicht, weil es auf eine 24bit Bitmap beharrt.

Jetzt wird mir auch immer klarer, wieso mir als ich mit OpenGL begann, von der LCL abgeraten wurde.
Es hiess immer ich sollte doch SDL nehmen. Und ich muss sagen, die hatten Recht. Eine Bitmap hat dort immer das gleiche Format, egal welches OS es verwendet.
Dateianhänge
Texture_Font.zip
(5.07 KiB) 48-mal heruntergeladen
Bildschirmfoto vom 2024-06-08 17-17-11.png
Bildschirmfoto vom 2024-06-08 17-17-11.png (9.25 KiB) 7393 mal betrachtet
Bildschirmfoto vom 2024-06-08 17-14-53.png
Bildschirmfoto vom 2024-06-08 17-14-53.png (7.83 KiB) 7393 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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 »

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 ;)
--
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 »

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
Screenshot (986).png (13.49 KiB) 7381 mal betrachtet
Zuletzt geändert von PeterS am So 9. Jun 2024, 16:34, insgesamt 3-mal geändert.

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: Sa 8. Jun 2024, 17:21 Unter Linux sieht es schon mal schön aus.
Ja, das sieht schon gut aus.

Ich habe mit Deinem Projekt aber (war's letzte Mal auch schon .) diese beiden Meldungen:
Screenshot (987).png
Screenshot (987).png (6.2 KiB) 7378 mal betrachtet
Screenshot (988).png
Screenshot (988).png (9.32 KiB) 7378 mal betrachtet

Das hatte ich dann letztes Mal so gelöst daß ich Deinen Code in ein neues leeres Projekt umkpoiert hatte.
Was müßte ich denn um- oder einstellen damit das bei mir auf Target Windows (Win32) läuft ?

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 »

Hab's gefunden .. Win32

Screenshot (990).png
Screenshot (990).png (13.87 KiB) 7377 mal betrachtet

[Edit] das hier hätte es auch getan :-(
Screenshot (992).png
Screenshot (992).png (2.27 KiB) 7371 mal betrachtet

Jetzt sieht es bei mir so aus:

Screenshot (989).png
Screenshot (989).png (7.07 KiB) 7377 mal betrachtet
Zuletzt geändert von PeterS am So 9. Jun 2024, 16:49, insgesamt 1-mal geändert.

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: Sa 8. Jun 2024, 17:21 Nur bei Windoof will es nicht, weil es auf eine 24bit Bitmap beharrt.
Also es fehlt das vierte Byte, für den Transparenz-Kanal ?

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 »

Das Beispiel-Projekt "mtext.lpi" aus OpenGLCoreTutorials-master läuft jetzt auch bei mir.

Der Autor hat da was geändert, war ein Problem mit dem decimal separator .. (Punkt statt Komma)

Screenshot (993).png
Screenshot (993).png (37.34 KiB) 7371 mal betrachtet

Antworten