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.
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.
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:
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.
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
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...
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.
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.