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

Aktuelle Zeit: Fr Jul 18, 2025 15:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mehrere Schriftarten benutzen ?
BeitragVerfasst: Fr Dez 13, 2002 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Dez 09, 2002 11:45
Beiträge: 13
Wohnort: Garmisch - Partenkirchen
Ich hab folgenden Code geschrieben ...
Code:
  1.  
  2.  
  3. var
  4.  
  5. ...
  6.  
  7. Font, Font2: HFont;
  8.  
  9. base: GLUInt;
  10.  
  11. gmf: array[0..255] of GLYPHMETRICSFLOAT;
  12.  
  13. ...
  14.  
  15.  
  16.  
  17. Procedure BuildFont();
  18.  
  19. begin
  20.  
  21. base := glGenLists(256);
  22.  
  23. font := CreateFont(-12,0,0,0,FW_BOLD,0,0,0,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE or DEFAULT_PITCH,'Kelt');
  24.  
  25. font2 := CreateFont(-12,0,0,0,FW_BOLD,0,0,0,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_DONTCARE or DEFAULT_PITCH,'Times New Roman');
  26.  
  27. SelectObject(DC,font);
  28.  
  29. wglUseFontOutlines(DC,0,255,base,0.1,0.2,WGL_FONT_POLYGONS,@gmf);
  30.  
  31. end;
  32.  
  33.  
  34.  
  35. ...
  36.  
  37. procedure glPrint(text: PChar);
  38.  
  39. begin
  40.  
  41. if (text = '') then exit;
  42.  
  43. glPushAttrib(GL_LIST_BIT);
  44.  
  45. glListBase(base);
  46.  
  47. glCallLists(length(text), GL_UNSIGNED_BYTE,text);
  48.  
  49. glPopAttrib();
  50.  
  51. end;
  52.  
  53.  
  54.  
  55. ...
  56.  
  57.  
  58.  
  59. procedure GLDraw();
  60.  
  61. begin
  62.  
  63.   glTranslatef(1,-2,0);
  64.  
  65.   glPushMatrix;
  66.  
  67.   glBindTexture(GL_TEXTURE_2D,texture[4]);
  68.  
  69.   SelectObject(DC,Font2); //Bewirkt keine Änderung der Schriftart
  70.  
  71.   wglUseFontOutlines(DC,0,255,base,0.1,0.2,WGL_FONT_POLYGONS,@gmf);
  72.  
  73.   //Bewirkt eine Änderung aller Schriftarten zu Font 2 und reisst
  74.  
  75.   //die Performance in den Keller ...
  76.  
  77.   glTexGeni(GL_S,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  78.  
  79.   glTexGeni(GL_T,GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
  80.  
  81.   glEnable(GL_TEXTURE_GEN_S);
  82.  
  83.   glEnable(GL_TEXTURE_GEN_T);
  84.  
  85.   glPrint('Start'); //Ausgabe des Textes
  86.  
  87.   glDisable(GL_TEXTURE_GEN_S);
  88.  
  89.   glDisable(GL_TEXTURE_GEN_T);
  90.  
  91.   glPopMatrix;
  92.  
  93. end;
  94.  
  95.  


Welche Möglichkeiten hat man, um über glPrint (oder was anderes) eine Schriftart zu wechseln ? Ich glaube, das muss im glInit - Bereich geschehen, da während des Rendervorganges SelectObject(DC,HGDIOBJ) keine Wirkung hat und wglUseFontOutlines jede Schriftart umstellt und die Performance killt.

_________________
No pain, no gain


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Diese OpenGL Methode (wglUseFontOutlines) um eine Schrift zu erstellen, liefert nach beendigung lediglich eine OpenGLListe zurück.
Das einzige was du tun musst ist bei glPrint eine andere Liste zu übergeben.

Code:
  1.  
  2.  
  3. var
  4.  
  5.   base_1, base_2: GLUInt;
  6.  
  7.   gmf_1, gmf_2: array[0..255] of GLYPHMETRICSFLOAT;
  8.  
  9.  
  10.  
  11. procedure BuildFont();
  12.  
  13. begin
  14.  
  15.   base_1 := glGenLists(256);
  16.  
  17.   base_2 := glGenLists(256);
  18.  
  19.  
  20.  
  21.   // Create Fonts
  22.  
  23.  
  24.  
  25.   SelectObject(DC,font);
  26.  
  27.   wglUseFontOutlines(DC,0,255,base1,0.1,0.2,WGL_FONT_POLYGONS,@gmf_1);
  28.  
  29.  
  30.  
  31.   SelectObject(DC,font2);
  32.  
  33.   wglUseFontOutlines(DC,0,255,base2,0.1,0.2,WGL_FONT_POLYGONS,@gmf_2);
  34.  
  35.  
  36.  
  37.   // Fonts wieder Frei geben
  38.  
  39. end;
  40.  
  41.  
  42.  
  43. procedure glPrint(text: PChar; ListBase: GLUInt);
  44.  
  45. begin
  46.  
  47.   if (text = '')
  48.  
  49.     then exit;
  50.  
  51.   glPushAttrib(GL_LIST_BIT);
  52.  
  53.   glListBase(ListBase);
  54.  
  55.   glCallLists(length(text), GL_UNSIGNED_BYTE,text);
  56.  
  57.   glPopAttrib();
  58.  
  59. end;
  60.  
  61.  
  62.  
  63. procedure GLDraw();
  64.  
  65. begin
  66.  
  67.   ...
  68.  
  69.   glPrint('Font 1', base_1);
  70.  
  71.   ...
  72.  
  73.   glPrint('Font 2', base_2);
  74.  
  75.   ...
  76.  
  77. end;
  78.  
  79.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
kaum hat man eine Idee für sein Tut schon wird sie von jemand publiziert, der nicht mal was von dem Tut wusste... :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 16:57 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ein tut sollte ja auch wesentlich länger sein, als dieser recht kurze post.... must einfach ordentlich was machen, hi und da n bischen ausschweifen, n paar ideen liefern, dann wird da scho n brauchbares tut draus - schriften in opengl bieten glaub viel platz zum schreiben


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
hab ich gesagt, dass das meine einzige Idee war? :twisted:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
chi chi chi :D
Kommt ja auch nicht wieder vor. :wink:

Aber was mir dazu noch einfällt. Der einfachste, beste und sauberste weg so etwas zu mache wäre eine Klasse draus zu stricken.
Wenn Interesse besteht kann ich ja mal so tun.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 13, 2002 17:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
danke für die gute Idee :wink:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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 | 14 Queries | GZIP : On ]