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

Aktuelle Zeit: Di Jul 15, 2025 02:06

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zum VCL-Template (Bitmapfonts)
BeitragVerfasst: Mo Okt 10, 2005 13:57 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Moin.

ich verwurschtle gerade teile des templates für ein projekt, unter anderem die Bitmapfonts.

und da irritiert mich was:

Code:
  1. // Displaylisten für 256 Zeichen erstellen
  2.   result := glGenLists(96); //<---- das hier
  3.   // Fontobjekt erstellen
  4.   Font     := CreateFont(Height, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  5.                 ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(pFontName));
  6.   // Fontobjekt als aktuell setzen
  7.   SelectObject(DC, Font);
  8.   // Displaylisten erstellen
  9.   wglUseFontBitmaps(DC, 0, 256, result);
  10.   // Fontobjekt wieder freigeben
  11.   DeleteObject(Font);


warum braucht man für 256 Zeichen nur 96 Displaylisten?

_________________
Bild

"User Error. Replace User and hit Continue."


Zuletzt geändert von luketheduke am Mi Okt 12, 2005 09:55, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich würde mal spontan darauf tippen, dass das nen Fehler ist. Normal braucht man genau so viele DLs wie man Buchstaben haben will. Der Code im Wiki beinhält glGenLists(256);.

Wobei man da normal auch keine 256 Zeichen benötigt. Mit 128 kommt man völlig aus. Aber es ist einfacher überflüssige Zeichen mitzuschleppen als bei jedem Zeichen erst mal zu suchen welche DL es dann nun hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 15:14 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Irgendwo wird da aber glaube ich auch glListBase(32) gesetzt, so dass man dann von #32-#128 zumindest die gebräuchlichsten zeichen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 10, 2005 21:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
Das ist gut. Ich benutze nämlich mehrere Schriftarten und da wär ich mit gllistbase (das ich benutze, um den verwendeten font auszuwählen) ganz schön reingefallen.

Mal sehen, wie ich das mache.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 11, 2005 07:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wobei. Wenn ich so im Halbschlafe darüber nachdenke. Wie kann der obrige Code überhaupt sinnvoll funktionieren?

Kleine Denkaufgabe. Wir erzeugen uns 96 DLs. Dann fangen wir an Zeichen zu generieren. Beginnen bei dem 0 ten und insgesamt 256 Zeichen. Wenn die Zeichen jetzt dargestellt werden wird glCallLists aufgerufen. Der nimmt sich ein Zeichen und addiert dessen Wert zu unsere Startliste hinzu. Zeichen 32 befindet sich also genau an der 32ten Stelle unsere Liste. Wenn wir jetzt glListBase aufrufen, dann verschiebt sich der Startpunkt unsere Liste. Das ist ganz praktisch um die ersten 31 Zeichen raus zu lassen. Die interessieren eh keinen. Nur dummerweise wurde die mitgeneriert und wenn dann ListBase auffgerufen wird, dann dürfte kein Zeichen mehr so sein wo es eigentlich hin gehört.

Worauf will ich also hinaus. Der Aufruf von wglUseFontBitmaps müsste so lauten.
Code:
  1. wglUseFontBitmaps(DC, 32, 96, result);

Und dann müsste vor dem Zeichnen auch glListBase(32) aufgerufen werden. Um die ersten 31 Zeichen zu überspringen. Oder eben der Aufruf von glGenLists müsste auf 128 oder 256 erweitert werden. Auf jeden Fall sollte wglUseFontBitmaps auch nur so viele Zeichen generieren wie auch tatsächlich in den Listen gespeichert werden können.

Wenn du mehrere Schriften benutzt, dann solltest du das in Klassen kapseln. So habe ich das gemacht und dann sollte auch jede Klasse eine eigene ListenVariable haben. Das ist jedenfalls der einfachste und profesionellste Weg. Speziell, wenn du beliebig viele Schriften haben kannst solltest du es so machen, das erspart dir einen gewaltigen Verwaltungsaufwand.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 11, 2005 19:16 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Man sollte aber noch hinzusagen, dass diese Methode starke Geschwindigkeitseinbusen mitsich bringt. Ich hab mal eine Hilfe damit geschrieben (Live im Programm angezeigt)....da ruckelte dann das Prog mit 10 Frames rum... War zwar nur ein OnBoard Chip ... aber der kann auch mehr als 10 Frames im Normalbetrieb.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 11, 2005 21:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
hmm... so viel text wirds nicht werden. aber ist klar, wenn da pro frame mehrere hundert listen ausgeführt werden müssen....

@Lossy Ex: Was meinst du mit Listenvariable?

Die Fonts werden übrigens wohl nur 3-5 verschiedene hardcoded sein. ich muss nur noch überlegen, wie ich das hinkrieg, dass ä/ö/ü drin ist, ohne dass ich doch die komplette ascii-tabelle(bzw. von space bis ü) reinstopfen muss...

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 05:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Damit meinte ich die Variable die an glGenLists übergeben wird. Die halt eine Startliste enthält.

Für äöü würd ich mir überlegen ob es nicht sinvoller wäre dann die anderen Zeichen auch mit generieren zu lassen. oder ob du dann deswegen einen Riesen aufwand betreiben möchtest. Das sind dinge die du nicht direkt an OpenGL übergeben kannst. Du musst das dann per hand machen.

Beim Zeichnen müsste OpenGL eigentlich die position weiter setzen auf das du lediglich "nur" noch die inzelnn Listen aufrufen müsstest. Diese müsstest du mappen. Damit sie sich dann beim Generieren hinter den anderen Zeichen platzieren können. Mir persönlich wäre das wohl ein wenig zu viel aufwand.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 12, 2005 09:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Like: Könntest du beim Threadtitel noch "(Bitmapfonts)" hinzufügen. Damit man gleich weiß, um was es hier eigentlich geht? Danke. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

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