Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 14:55

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: 2D Schrift in einem Objekt
BeitragVerfasst: Sa Dez 14, 2002 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 14:00
Beiträge: 14
Wohnort: Saarland
bin noch anfänger auf dem opengl gebiet, daher meine frage(n):

1) ich hab mit gl_quads ein Rechteck gemalt. Nun möchte ich in diesem Rechteck zentriert eine normale 2D Schrift ausgeben. Wie kann ich das am einfachsten lösen?

2) Wenn ich nun so ein Rechteck mit Schrift habe, möchte ich dieses Rechteck mitsamt der Schrift verschieben. Wie kann ich die Schrift an das Object binden? Oder muss ich die Schrift immer wieder an der neuen Position ausgeben?

Danke schon mal im Vorraus

Jack Falworth

_________________
Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: re
BeitragVerfasst: Sa Dez 14, 2002 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für dein Problem gibts zwei Lösungen :

Lösung 1 : (einfach)
Du machst dir mit deinem Bildbearbeitungsprogramm eine Textur mit deiner zentrierten Schrift drauf und nutzt die Texturemappingfunktion von OpenGL indem du die Textur lädst und an dein GL_QUAD bindest.Somit bewegt sich die Schrift natürlich auch mit deinem Objekt.
Diese Methode eignet sich aber leider nur für Text, der sich nicht mehr ändern soll...es sei denn, du machst dir für jeden Text den du brauchst eine eigene Textur.Das ist aber umständlich und braucht viel Grakaspeicher.

Lösung 2 : (schwer)
Du bastelst dir eine Routine, die in der Lage ist unter OpenGL Text auszugeben (egal ob als Texturfont (besser) oder als Bitmapfont).
Nun benutzt du die Möglichkeit, in Echtzeit in eine Textur zu rendern.(Dazu gibts auf Delphi3D.net einige gute Beispiele).
Du renderst also einen Text in eine Textur und bindest diese an dein GL_QUAD.
Diese Methode ist zwar etwas komplizierter, aber die flexiblere der beiden Möglichkeiten!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: re
BeitragVerfasst: So Dez 15, 2002 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 14:00
Beiträge: 14
Wohnort: Saarland
Zitat:
Für dein Problem gibts zwei Lösungen :

Lösung 2 : (schwer)
Du bastelst dir eine Routine, die in der Lage ist unter OpenGL Text auszugeben (egal ob als Texturfont (besser) oder als Bitmapfont).
Nun benutzt du die Möglichkeit, in Echtzeit in eine Textur zu rendern.(Dazu gibts auf Delphi3D.net einige gute Beispiele).
Du renderst also einen Text in eine Textur und bindest diese an dein GL_QUAD.
Diese Methode ist zwar etwas komplizierter, aber die flexiblere der beiden Möglichkeiten!


Ich müsste diese Lösung nehmen, weil die Schrift sich ändert.
Hast du zufällig nen direkten Link dafür? Ich werd da nicht so richtig fündig.

MfG

Jack Falworth

_________________
Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 15, 2002 14:49 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Hmm... spontan habe ich nichts auf Tutorial-Nivea. aber Du solltest mal bei Nitrogen nachsehen, der hat dafür etwas geschriebem was sich auch bedingt gut einsetzen läßt (DarHanoi) z.B. siehe Links.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: re
BeitragVerfasst: So Dez 15, 2002 15:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Ich müsste diese Lösung nehmen, weil die Schrift sich ändert.
Hast du zufällig nen direkten Link dafür? Ich werd da nicht so richtig fündig.


Zieh dir mal folgendes Demoprogramm von Delphi3D.net : <a href='http://www.delphi3d.net/download/pbuffer.zip' target='_blank'>http://www.delphi3d.net/download/pbuffer.zip</a>

Dort wird ein pPuffer (also ein Offscreen-Puffer) genutzt um eine dynamische Textur zu generieren.
Das ist die beste Lösung um direkt in eine Textur zu rendern.Jetzt must du dir nur noch eine Methode für die Textausgabe in OpenGL entwickeln, und deinen Text dann zentriert in den pPuffer rendern und diesen Puffer dann als Textur für den GL_QUAD nutzen.
Zur Textausgabe empfehle ich einen Texturfont.Ein sehr gutes Tut dazu gibts bei Nehe (http://nehe.gamedev.net)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 00:52 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 14:00
Beiträge: 14
Wohnort: Saarland
Code:
  1.  
  2.  
  3. procedure BuildFont;
  4.  
  5. var font: HFONT;
  6.  
  7.  &nbsp; &nbsp;gmf : array [0..255] of GLYPHMETRICSFLOAT;
  8.  
  9. begin
  10.  
  11.  &nbsp;base := glGenLists(256);
  12.  
  13.  &nbsp;font := CreateFont(-12,
  14.  
  15.  &nbsp; &nbsp; &nbsp; 0,
  16.  
  17.  &nbsp; &nbsp; &nbsp; 0,
  18.  
  19.  &nbsp; &nbsp; &nbsp; 0,
  20.  
  21.  &nbsp; &nbsp; &nbsp; FW_BOLD,
  22.  
  23.  &nbsp; &nbsp; &nbsp; 0,
  24.  
  25.  &nbsp; &nbsp; &nbsp; 0,
  26.  
  27.  &nbsp; &nbsp; &nbsp; 0,
  28.  
  29.  &nbsp; &nbsp; &nbsp; ANSI_CHARSET,
  30.  
  31.  &nbsp; &nbsp; &nbsp; OUT_TT_PRECIS,
  32.  
  33.  &nbsp; &nbsp; &nbsp; CLIP_DEFAULT_PRECIS,
  34.  
  35.  &nbsp; &nbsp; &nbsp; ANTIALIASED_QUALITY,
  36.  
  37.  &nbsp; &nbsp; &nbsp; FF_DONTCARE or DEFAULT_PITCH,
  38.  
  39.  &nbsp; &nbsp; &nbsp; 'Comic Sans MS');
  40.  
  41.  
  42.  
  43.  &nbsp;SelectObject(DC, font);
  44.  
  45.  
  46.  
  47.  &nbsp;wglUseFontOutlines( &nbsp; DC,
  48.  
  49.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,
  50.  
  51.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;255,
  52.  
  53.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;base,
  54.  
  55.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.0,
  56.  
  57.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2,
  58.  
  59.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WGL_FONT_POLYGONS,
  60.  
  61.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@gmf);
  62.  
  63.  
  64.  
  65. end;
  66.  
  67.  
  68.  
  69. procedure KillFont;
  70.  
  71. begin
  72.  
  73.  &nbsp;glDeleteLists(base, 256);
  74.  
  75. end;
  76.  
  77.  
  78.  
  79. procedure glPrint(text : pchar);
  80.  
  81. begin
  82.  
  83.  &nbsp;if (text = '') then
  84.  
  85.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Exit;
  86.  
  87.  
  88.  
  89.  &nbsp;glPushAttrib(GL_LIST_BIT);
  90.  
  91.  &nbsp;glListBase(base);
  92.  
  93.  &nbsp;glCallLists(length(text), GL_UNSIGNED_BYTE, text);
  94.  
  95.  &nbsp;glPopAttrib();
  96.  
  97. end;
  98.  
  99.  


Das hab ich jetzt mal gefunden. Damit kann ich eine 2D schrift erzeugen, aber nicht ändern. Ich weiß auch nicht wie ich die Größe und die Stelle für die Schrift ändern kann. (??)

Das Beispiel mit pbuffer versteh ich nun wirklich gar nicht. Gibt es nirgends ein Programm, dass sich auf das nötigste beschränkt und zeigt wie man 2D Schriften erzeugt, auf eine Textur bindet und die Textur auf ein Objekt (Rechteck) legt??
Bin in OpenGL noch ein ziemlicher Anfänger und kann leider mit den obengenannten Beispielen (pbuffer etc.) (noch) nichts anfangen.

MfG

Jack Falworth

_________________
Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 01:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn dir die Sache mit dem pBuffer zu schwer ist, dann kannst du's auch etwas einfacher mit glCopyTexImage2D() machen.
Das geht ungefähr nach folgendem Schema : (Wenn ich morgen (oder besser heute :wink: ) noch Zeit finde, schreib ich dazu vielleicht mal ein kurzes Demoprogramm) :

- Erstelle eine neue Textur in die dein Text nachher reinkommt
- Setze deine Projektions- und Modelansichtsmatrix zurück
- Rendere jetzt einfach nur den Text (z.B. mit der von dir erwähnten Methode)
- Binde deine eben erstellte Textur
- Kopiere nun deinen Viewport in diese Textur mittels glCopyTexImage2D

Nun ist deine Textur mit deinem dynamischen Text fertig...jetzt musst du nur noch deine normale Szene rendern und deine eben erstellte Textur an dein Objekt binden!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 01:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ok...ich konnte mich mal wieder nicht beherrschen :twisted:

Trotz abartiger Müdigkeit (für diese Uhrzeit -> 1:30 <- wohl auch verständlich) hab ich mich dazu durchgerungen eine kleine Demoanwendung zu deinem Problem zu proggen...zum Download gibts das ganze als EXE+BIN hier <a href='http://www.delphigl.de/files/rendertotex.zip' target='_blank'>http://www.delphigl.de/files/rendertotex.zip</a> (278KB)
Der Quellcode ist weder übersichtlich noch besonders gut kommentiert, aber bei so einem Programm gibts auch net viel zu kommentieren...

Und hier noch ein Screenshot...nix atemberaubendes und nur knapp 10 Minuten Arbeit :
Bild

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 13:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 14:00
Beiträge: 14
Wohnort: Saarland
Wow danke für dein Programm!! Genau so etwas habe ich gesucht.
Muss mir es noch etwas genauer anschauen, aber ich denke damit komme ich schon klar.

Nochmals danke

Jack Falworth

PS: Aber das mit den FPS auf dem Screenshot ist nicht dein Ernst oder? 8O

_________________
Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 14:06 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Nö, das mit den 1000FPS kann schon hinkommen - ich hab auf meiner GeForce2MX ohne VSync zwar nur gemächliche 500FPS, aber genau deshalb halte ichs für normal ;-). Will mir nicht jemand meinen Rehcner aufrüsten? :crazy: Man kanns ja mal probieren ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 14, 2002 14:00
Beiträge: 14
Wohnort: Saarland
ähm mein Rechner ist nicht gerade langsam, aber ich bekomm max. 100 Frames hin :(
Aber ist ja egal, solangs nicht ruckelt :)

MfG

Jack Falworth

_________________
Warum soll ich über eine Mauer klettern wenn ich auch durch das Tor reingehen kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 26, 2002 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn deine Frames konstant bei 100 liegen, dann ist dein VSync aktiv.Der sorgt dafür, das deine Graka nur so viele Bilder rendert, wie die Bildwiederholfrequenz deines Monitors zulässt.
Monitor auf 100Hz -> maximal 100fps

Normalerweise lässt sich der VSync aber im Treibermenü deiner Graka deaktiveren!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
da regen sich doch manche auf wegen 500 oder 100 fps

was soll ich mit meiner alten voodoo 3 agp sagen he???

ich hab bei meinen progs teilweise 10 bis 20 fps (bei 8000 Faces)

also sollte sich hier mal keiner außer mir aufregen !!!!


*scherz* (das mit den frames aber ne)

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 19:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Tja schon ein Unterschied mit VSync bekomme ich 65 fps, ohne gleich mal 800...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 19:58 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
65 fps?!?! bei angeschaltetem VSync? Du haste ienen LCD/TFT Monitor, oder? Wenn nicht stell unbedingt deine Wiederholfrequenz höher, das macht das arbeiten deutlich angenehmer, da die Augen dann nicht durch das Monitorgeflimmer so gestresst werden. 85 Hz ist Pflicht!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 16 Queries | GZIP : On ]