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

Aktuelle Zeit: Do Jul 17, 2025 09:21

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 28, 2003 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Ich hab mal versucht Outline-Fonts im Ortho Modus zu verwenden...
Das läuft scheinbar nicht soooo toll, ehr gesagt überhaupt nicht, die Schrift wird zwar gezeichnet aber so klein, das man nur nen paar Pixel erkennen kann....

Code:
  1.  
  2.  
  3. function tfont.getlength;
  4. var i:integer;
  5. begin
  6.  result:=0;
  7.  for i:=0 to length(str)-1 do
  8.  begin
  9.   result:=result+gmf[pbyte(str[i])^].gmfcellincx;
  10.  end;
  11. end;
  12.  
  13. procedure tfont.write;
  14. begin
  15.  glcolor4f(c.r,c.g,c.b,c.a); // <-- unwichtig, aber das geht...
  16.  glpushmatrix;
  17.  case pos of
  18.  &nbsp;font_left:
  19.  &nbsp;begin
  20.  &nbsp; gltranslatef(x,y,z);
  21.  &nbsp;end;
  22.  &nbsp;font_center:
  23.  &nbsp;begin
  24.  &nbsp; gltranslatef(x-getlength(str)/2,y,z);
  25.  &nbsp;end;
  26.  &nbsp;font_right:
  27.  &nbsp;begin
  28.  &nbsp; gltranslatef(x-getlength(str),y,z);
  29.  &nbsp;end
  30.  &nbsp;else
  31.  &nbsp;begin
  32.  &nbsp; gltranslatef(x,y,z);
  33.  &nbsp;end;
  34.  end;
  35.  glpushattrib(gl_list_bit);
  36.  gllistbase(base);
  37.  glcalllists(length(str),gl_unsigned_byte,str);
  38.  glpopattrib;
  39.  glpopmatrix;
  40. end;
  41.  
  42.  


Ich denke mal an der Initalisierung liegts nicht, hatte vielleicht schonmal einer ein ähnliches Problem?

msg las

_________________
www.las.eu.tc


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 29, 2003 10:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn die Schrift zu klein angezeigt wird, dann skalier sie doch einfach mittels glScalef.Allerdings rate ich dir sowieso von der Nutzung von Outlinefonts ab, da diese ja komplett aus Polygonen bestehen und sehr rechenintensiv sind.
Wenn du nur 2D-Schrift im Orthomodus anzeigen willst, dann empfehle ich dir Bitmapfonts die auch nur 2D sind und auf Basis von vorhandenen Windowsschriftarten erstellt werden.Die machen weniger Probleme und sind vor allem nicht so leistungsfressend.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Okay, Bitmapfonts... Aber wie kann ich da die Länge des Textes in Pixeln feststellen?
Bei Outlinefonts ist das recht simpel. (s.o.)


mfg las

_________________
www.las.eu.tc


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 10:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Beim Erstellen deines Fonts musst die Größe abfragen.
Hat aber nichts mit OpenGL zu tun. Ist eine reine Sache von Windows, weil das ja flacher ext ist.

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre><span class='reserved'>var</span>
FAbc: <span class='reserved'>array</span>[<span class='integer'>0</span>..<span class='integer'>255</span>] <span class='reserved'>of</span> TABC;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> // wglUseFontBitmaps(FDC, ...). etc.
GetCharABCWidths(FDC, <span class='integer'>0</span>, <span class='integer'>255</span>, FAbc[<span class='integer'>0</span>]);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Beim Erstellen des Fonst musst du dessen Buchstabenbreite abfragen. FDC ist der DC des Fensters mit dessen Hilfe du das Font erstellt hast. Dort ist ja noch das Font gesetzt.

<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> <span class='reserved'>for</span> Idx := <span class='integer'>1</span> <span class='reserved'>to</span> Length(Text) <span class='reserved'>do</span> <span class='reserved'>begin</span>
Width := Width + FAbc[Ord(Text[Idx])].abcB;
<span class='reserved'>end</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
herrausfinden der Textbreite


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Ich denke mal das funzt, thx!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 16:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Ja, das funzt, danke, aber ich hab ein neues Problem...
Wenn die Schrift nur zu einem kleinen Teil über den linken bzw unteren Fensterrand "hinausgeht", verschwindet sie.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das liegt dann wohl am automatischen Clipping das deine Grafikkarte ausführt, und da wirst du auch nicht drum rum kommen.
Du musst dann halt selbst drauf achten das die Ränder deines Viewports nicht "verletzt" werden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 17:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Aber oben und rechts gehts...
Und der Text sollte auch über den Fensterrand "hinausgehen" können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 17:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dann schreib ne E-Mail an nVidia oder ATI (von wem deine Graka halt ist) und sag denen dass...allerdings wird da keiner von uns was dran ändern können das der Text an diesen Rändern geclippt wird.

Wenn du das nicht willst, dann musst du deinen Text halt selbst in eine Textur rendern und dann ein Quad mit dieser Textur an die entsprechende Position zeichnen, dann sollte auch dieses Problem verschwunden sein.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Dann muss ich aber wieder blenden etc...
Es muss doch irgendwie gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
a) Es geht nicht...(sag ich jetzt zum dritten Mal)
b) Wenn du kein Blending willst, dann nimm halt den Alphatest.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 01, 2003 08:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 08:09
Beiträge: 98
Ja, mein Meister. :mrgreen:
Hmmm, wenn ich aber auf ne Textur rendere ist das sowas von scheiße...
Man kann ja keine beliebigen Texturegrößen nehmen.

Hmm die Buchstaben (also, sozusagen mit Textur) sind doch in einer Displaylist, oder?

mfg las


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 01, 2003 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
las hat geschrieben:
Ja, mein Meister. :mrgreen:
Hmmm, wenn ich aber auf ne Textur rendere ist das sowas von scheiße...
Man kann ja keine beliebigen Texturegrößen nehmen.

Doch.Wenn du MipMapping verwendest, kannst du auch (ab der RivaTNT auf jeden Fall) auch Texturen die nicht 2^n*2^n entsprechen verwenden.
Schau dir dazu mal die Extension SGIS_generate_mipmap, an, welche zum automatischen Erstellen von MipMaps nötig ist.

las hat geschrieben:
Hmm die Buchstaben (also, sozusagen mit Textur) sind doch in einer Displaylist, oder?

Ja, jeder Buchstabe besitzt ne eigenen Displayliste.

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 19 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]