Einstieg OpenGL => Textausgabe
Re: Einstieg OpenGL => Textausgabe
Code geputzt und hübsch gemacht ..
- Dateianhänge
-
Test BitmapFont 2024-06-07.zip
- (160.31 KiB) 46-mal heruntergeladen
-
- 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
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.
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.
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;
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
Mit Java und C/C++ sehe ich rot
Re: Einstieg OpenGL => Textausgabe
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 ..
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 ..

-
- 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
Ich habe da noch was anderes Probiert. Jedes Zeichen bekommt eine eigene TexturID.
Da wird es etwas verschluckt haben.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.
- 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
Mit Java und C/C++ sehe ich rot
Re: Einstieg OpenGL => Textausgabe
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:
Und dann das :
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.
Re: Einstieg OpenGL => Textausgabe
Die EXE direkt gestart, außerhalb von Lazarus, läuft ja ..
Re: Einstieg OpenGL => Textausgabe
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;
Im Moment werden ja alle Zeichen, egal wie breit sie sind, in konstantem Abstand in das OpenGL-Objekt "gemalt".
-
- 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
Dies müsste theoretisch möglich sein.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".
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- 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
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.
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 (9.25 KiB) 7393 mal betrachtet
-
- 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
Mit Java und C/C++ sehe ich rot
- 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
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
Just try it
Re: Einstieg OpenGL => Textausgabe
Ah, hallo corpsman !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![]()
Von Dir hatte ich mir opengltruetypefont heruntergeladen, und unter Windows (Win32) compiliert.
Leider blieb Franz sein Taxi leer .. kein Text auf dem Fenster ..

Zuletzt geändert von PeterS am So 9. Jun 2024, 16:34, insgesamt 3-mal geändert.
Re: Einstieg OpenGL => Textausgabe
Ja, das sieht schon gut aus.
Ich habe mit Deinem Projekt aber (war's letzte Mal auch schon .) diese beiden Meldungen:
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 ?
Re: Einstieg OpenGL => Textausgabe
Hab's gefunden .. Win32
[Edit] das hier hätte es auch getan
Jetzt sieht es bei mir so aus:
[Edit] das hier hätte es auch getan

Jetzt sieht es bei mir so aus:
Zuletzt geändert von PeterS am So 9. Jun 2024, 16:49, insgesamt 1-mal geändert.
Re: Einstieg OpenGL => Textausgabe
Also es fehlt das vierte Byte, für den Transparenz-Kanal ?Mathias hat geschrieben: Sa 8. Jun 2024, 17:21 Nur bei Windoof will es nicht, weil es auf eine 24bit Bitmap beharrt.
Re: Einstieg OpenGL => Textausgabe
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)
Der Autor hat da was geändert, war ein Problem mit dem decimal separator .. (Punkt statt Komma)