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

Aktuelle Zeit: Mi Jul 16, 2025 19:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Dez 22, 2010 09:31 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hallo,

derezeit stelle ich Text unter OpenGL über wglUseFontoutlines und nutze dazu nur den Arial Font dar.

Leider dauert die Erzeugung des Fonts ca 1.5 Sec für 255 characters. Auch wenn dies nur ein mal duchgeführt werden muss ist einer höhere Zeit kritisch. Die 1.5 sec sind gerade noch akzeptabel, da sie sowohl beim Drucken, als auch beim Fullscreen (also immer wenn eine neuer rendering contex benötigt wird) immer wieder auftreten.

Nun würde ich gerne Unicode Zeichen darstellen (und als weitere Steigerung verscheidene Fonts). Dies würde die Zeit zur Erzeugung mit wglUseFontoutlinesW stark verlängern.

Gibt es dazu best parctise wege? Die Zeiten für die Fonterstellung steigen meiner Meinung nach ins unerträgliche.

Gibt es Fonts die unter OpenGL besser dargestellt werden könne (z.B. Lininefonts, wie die auch immer gezeichnet werden können, das man in akzeptabler Geschwindigkeit auch Unicode darstellen kann)?

Grüße
User69


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 22, 2010 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Die Dauer, der Operation, kann ich mir nur mit der Zugriffszeit auf die Festplatte erklären. Der erst zugriff auf eine Font File kostet nen weilchen, zwar nur milisekunden aber genug.
Das zweite Problem ist die Konvertierung von quadratischen splines zu triangle mesh und dann noch die alloziierung von VRAM.
Ich glaube kaum, dass du ohne ein wechsel von der Windows GL API auf eine eigene Funktion noch optimieren kannst.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 22, 2010 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also Festplatte ist eher weniger das Problem. Die Fonts sind gut genug strukturiert, um mal eben ein Font erstellen und irgendwo drauf zeichnen zu können ohne große Performanceverluste hinnehmen zu müssen. Also in normalen Windows Anwendungen. wglUseFontOutlines* erzeugt richtig echte 3D Objekte. Dazu müssen die Splineinformationen der Zeichen erst einmal in X Punkte zerlegt werden. Und diese müssen dann anständig trianguliert werden. Es gibt beim Erstellen der Fonts irgendwo die Möglichkeit eine Qualität einzustellen. Dadurch sehen die Fonts zwar deutlich eckiger aus aber werden um ein vielfaches Schneller geladen. Entsprechend haben die Funktionen einfach viel zu tun btw sind auch nicht die Schnellsten. Man darf auch nicht vergessen, dass die wgl Funktionen seit Anbegin der Zeit bei OpenGL dabei sind und Microsoft wenig interesse daran verspüren wird den "Konkurenten" zu optimieren.

Was du in jedem Fall vermeiden musst ist das Erzeugen aller möglichen Buchstaben/Fonts. Auch wenn es der einfachste Weg ist. Die Displaylisten in die die Zeichen geworfen werden gehen dir alleine bei einem bis zwei Fonts schon vorher aus. Abgesehen davon kann die Technik noch so schnell sein es würde immer eine gehörige Menge Zeit in Anspruch nehmen. Und obendrein würden 95-99% der erstellten Zeichen sowieso nicht benutzt werden. Selbst jetzt würde man wahrscheinlich über 20% Ausnutzung nicht hinweg kommen. 20% von 255 Zeichen wären 51 Zeichen. Darin hättest du Platz für alle kleinen Buchstaben, alle Zahlen, ein paar Satzzeichen und ein paar große Buchstaben. Das reicht um die meisten Texte zu erzeugen. Im Umkehrschluss hättest du wahrscheinlich jetzt schon ca. 80% Balast.

Was ich damit sagen will. Du brauchst einen Manager der nur das erstellt was du tatsächlich brauchst und auch nur dann wenn du es brauchst. An den musst du einen Text übergeben. Er muss den Analysieren und die benötigten Zeichen erstellen. Beim Zeichnen muss er dann seine gesammelten Informationen auswerten um den Text zu zeichnen. Das dürfte wahrscheinlich sogar schon ausreichen um über die 1-2 Sekunden nicht hinweg zu kommen.

Ansonsten stellt sich mir die Frage ob es unbedingt Outline sein muss. Denn das erzeugt sowohl Vorder- als auch Rückseite inklusive Seitenflächen. Das dauert natürlich länger als wenn man etwas nimmt was nur eine Vorderseite erstellt. Wenn denn da nicht sogar noch etwas einfacheres ausreichen würde (und dabei meine ich nicht wglUseFontBitmap). Aber wozu du das brauchst kannst nur du wissen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 22, 2010 14:34 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hallo, also ich brauch das für reine 2D-Darstellung. Also wären mir Vorder+Rückseiten egal.

wglUseFontBitmap - muss ich noch mal prüfen - bisher hatte ich es nicht verwendet. Ich hatte vor Jahren mal entschieden dass wglUseFontOutlines besser wäre. Den exakte Grund kenn ich nicht mal mehr. Evtl. war es die Qualität, die wglUseFontOutlines besser war - aber ich muss es noch mal prüfen.

Auch die Option Manager muss ich mal prüfen (das klingt recht Interessant), aber das könnte evtl. relativ viel zeit brauchen immer idividuell jedes Zeichen zu erzeugen (wenn ich an unicode denke) - wenn es der benutzer gerade mal eingibt (ich weiß ja nie, davor was ich brauch).

Meine Fragen:
Gibt es nicht einfach Linienfonts (nicht Windows fonts), die ich unter opengl einfach und allgemein nutzen kann (ggf. ist sogar kostenpflichtig ok). Ich mein sowas, wie Autocad zeichenet.
Wie stellen CAD systeme Zeichen in 2D unter OpenGL dar? Die unterstützen auch Unicode und sind nicht gerade langsam.

User69


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 22, 2010 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Oft nutzen die Windows Programme Bitmap Fonts, libFreeType.dll.
Diese sind qualitativ wesentlich hochwertiger als die von Windows generierten(zu niedriger Alphakanal).
In der Windows Vista und aufwärts SDK ist es was anderes, denn Windows hat hier den Unterschied nachgeholt.
Ab Windows 7 wird allerdings Vektor basierte Fonts empfohlen und Microsoft hat Patente angemeldet, welche das rendern von ttf files über HSLS und GLSL Shader darstellbar sind, ohne größeren zwischenschritten. Dies ist aber noch recht experimentell und bisher nur in Demos zu sehen gewesen.

Vektorfonts haben einige gute Vorteile, sie sind Auflösungsunabhängig, einfach ein zu färben und schneller als Pixelfonts(in OpenGL und D3D).
Der Nachteil ist, dass man oft eine tesselierung verwendet, um die Quadratischen Splines in Triangle um zu wandeln.
Das ist natürlich langsam und muss bei größer werden, der Schrift, neu gemacht werden.
Deswegen hat das Microsoft Research Lab jemanden an diese Thematik gesetzt gehabt.
Die Lösung ist das die Quadratischen Splines in freie Vertex-Attribute bzw. bei neueren Karten in extra VBO's kommt und vorher in den Texturespace transformiert werden.
So kann der Shader bei quadratischen und kubischen splines recht gute annäherungen machen und aus 1 bis 2 triangle eine perfekte bezierkurve zeichnen, damit sind diese Schriftarten wirklich auflösungsunabhängig und sogar noch sehr billig mit Kantenglättung zu versehen. Die ganze sache ist um ein Vielfaches schneller als alle alternativen bei gleicher Qualität. Man hat also einmal ein kleinen Konvertierungs aufwand(kann als preprocess durchgeführt werden) und man kann dann in jeder Schriftgröße rendern, wie es einem beliebt. Leider darf dies nur im non commercial Bereich genutzt werden, sonnst muss man Lizenzgelder and MS zahlen(bzw. es ist nur als US Patent angemeldet).

Alternativ kannst du nur mit der Tesselierung leben oder auf Bitmap fonts zurück greifen. Hier gibt es optimierungen, wie z.B. Font-Atlas, also eine große Textur mit allen Glyphen drin, die man braucht. Eine generierte Lookuptable sagt dir dann an welcher Stelle in der Textur du welche Glyphe findest.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Dez 22, 2010 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Tak:? Nichts für ungut aber ich fühle mich wie auf einer anderen Welt. Es ist ja schön und gut, dass es so etwas gibt wie die Fonts direkt mit GLSL zu rendern. Die Vorteile davon werde ich definitiv nicht in Abrede stellen. Allerdings findest du das nicht vielleicht ein bisschen übertrieben? Zu mal der Großteil der Benutzer nicht mal einen Unterschied zwischen Kantenglättung und keine Kantenglättung sehen wird. Genau wie der Unterschied zwischen Windows GDI und FreeType. Wenn interessiert es ob die Kanten aus 16 Alphaabstufungen oder 256 bestehen (Wobei auch XP eine Methode hat um 8 Bit Abstufungen erzeugen zu können). Zu mal ich persönlich GDI Fonts dank des Grid-fittings sogar schöner finde. Die Idee mit dem Font-Atlas ist zwar auch ganz nett allerdings könnte die wohl schwer umsetzbar sein. Zu mindest würde ich gerne mal sehen wie du Texturen erstellst die mal eben 30.000 Zeichen enthalten. Und das ganze dann noch für verschiedene Fonts und Größen.

user69: Ich hatte gesagt, dass ich wglUseFontBitmap nicht meine. Etwas deutlicher ausgedrück. Es ist relativ egal was du benutzt. Solange es nicht wglUseFontBitmap ist! Es ist ziemlich langsam und sieht total gruselig aus.

Wegen dem Manager. Die Zeichen würden ja nicht wieder freigegeben werden. Sondern die müssten ja schon irgendwo zwischengespeichert werden. Je nachdem was der Benutzer macht (Projekt laden) könnte man natürlich die erzeugten Zeichen von Zeit zu Zeit wieder löschen. Um eben ein volllaufen des Speichers zu verhindern. Aber im Endeffekt muss es darauf hinauslaufen, dass du die Zeichen dann erstellst, wenn sie benötigt werden. Du kannst unmöglich alle möglichen Zeichen vorhalten.

Was das Generieren zur Laufzeit angeht. Sofern die Zeichen nicht exorbitant groß sind und da nicht wer weiß wie viel gemacht wird sollte sich das alles im Rahmen des Erträglichen halten. Zu mal der Benutzer ja ganz normal schreiben würde. Und selbst bei schnellen Scheibern existiert immer eine kleine Pause zwischen den Eingaben. Und als Milchmädchenrechnung. Deine 255 Zeichen erstellst du in 1,5 Sekunden. Klingt recht viel. Ist aber relativ, da relativ viele zeichen da sind. Auf ein Zeichen gesehen sind das 5,88 Millisekunden. Also grob gesagt bei jedem neuen Zeichen was erstellt werden müsste hätte die Anwendung weniger als 10ms zu tun. Und das dürfte wohl eher nur auffallen, wenn man wirklich butterweiche Animationen irgendwo laufen hat. Und zu mindest im lateinische Schriftsatz wiederholen sich die Zeichen sehr oft. Im asiatischen ist das etwas anders.

Ich mache zwar nur ungern Eigenwerbung. Aber vielleicht hilft es dir ja.
http://www.delphigl.com/forum/viewtopic.php?f=13&t=8103


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 23, 2010 11:30 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
@Lossy ex:
Zitat:
Ansonsten stellt sich mir die Frage ob es unbedingt Outline sein muss.

Was wäre denn die Alternative, wenn nicht wglUseFontBitmap und nicht wglUseFontOutlines?

Die Zeichen Manager Idee gefällt mir - ich kann damit vor allem unter Unicode die anzahl der zeichen enorm reduzieren. Das werde ich demnächst mal angehen. (Auch dein Projekt werde ich mir mal genauer ansehen).

Übrigens die Erstellung eines Zeichen kostet mir so ca 7 - 30ms im test mit den 255 Ansi Zeichen.

User69


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 23, 2010 11:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Es ist nicht übertrieben , Shader laden, fontdaten laden,Vbo erstellen, spass haben.
Sicherlich nicht die übliche Variante aber immer die neuen Möglichkeiten jemanden vor zu enthalten ist wesentlich schlimmer. Letztendlich entscheidet sich der Entwickler für eine Lösung aber ihn welche vor zu enthalten macht kein Sinn.

30000 Zeichen in eine Textur unter zu bringen Stelle ich mir lustig vor, die Textur will ich sehen xD Ich packe da lieber nur die Glyphen rein die ich brauch und Stelle ich zur Laufzeit ja fest und mit der lookuptable sollte es auch recht schwer werden die Textur voll zu bekommen. Für eine skalierbare App. Wird man nicht drum rum kommen, zwischen mehreren Texturen zu switchen aber wenn man so viele glyphen rendert sollte man überlegen wieso die ui so textgeballt ist.

Für User69 sollte erstmal wichtig sein, das wir zu einem dynamischen Font Loading raten, welches bei bedarf glyphen nach lädt.

Hier für wirst du nicht um eine Manager Klasse rum kommen. .Net rendert z.b. Nicht immer neu, sonder generiert bei Änderungen von Text die Ressource neu. Du kannst z.b. Vbo,Texturen oder displaylisten verwenden und bei Änderung eines Text Objektes ,den Manager den neuen Text geben und dieser kann darauf hin deine Ressourcen, für dieses Element, neu generieren.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 23, 2010 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
user69 hat geschrieben:
@Lossy ex:
Zitat:
Ansonsten stellt sich mir die Frage ob es unbedingt Outline sein muss.

Was wäre denn die Alternative, wenn nicht wglUseFontBitmap und nicht wglUseFontOutlines?

Die Frage nach der Alternative ist auch immer eine Frage des Einsatzes. Wenn zum Beispiel eine Schrift haben willst die du zur Laufzeit beliebig skalieren möchtest. Also als Animation, dann wirst du mit TexturFonts (oder alles in der Art) nicht weit kommen. Dann wird es immer auf ein Vektorfont hinauslaufen müssen. Wie auch immer das erst mal aussehen mag. Wenn du aber einfach nur Texte in 2-4 verschiedenen Größen irgendwo darstellen willst, dann kann die Lösung um ein vielfaches Einfacher werden. Also zum Beispiel simple TextureFonts die zur Laufzeit erstellt werden. Und dabei gibt es leider keinen wirklichen vorgefertigten Perfekten weg. Alleine für das Erstellen der einzelnen Glyphen gibt es mehrere Wege (wurden oben schon erwähnt).

Tak: Auch wenn es vollkommen offtopic ist und auch eine Sache des persönlichen Geschacks und jeweiliger Vorlieben. Du magst sicher recht haben. Jemandem sinnvolle Technologien vorzuenthalten ist nicht gut. Immer alle Möglichkeiten vorzuschlagen oder den neusten Technologien hinterher zu rennen halte ich für genau so falsch und teilsweise kontraproduktiv. Im Produktiveinsatz muss eine Technologie nun mal zu dem Rest des Projektes passen. Ohne User69s Projekt zu kennen sagt mir da einfach mein Bauchgefühl, dass Vektorfonts via Shader zu rendern nicht ganz zur Anwendung passen dürfte. Es ist vermutlich der perfekteste Weg wie man Fonts darstellen kann (sofern Cleartype realisierbar ist) aber auch das hat Vor und Nachteile. Zu mal man für diesen Weg detailierte Kenntnisse in Shadern mitbringen sollte. Um auch erst mal zu verstehen was da überhaupt passiert. Etwas einzusetzen ohne es verstanden zu haben ist sicher auch nicht so prikelnd.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 23, 2010 13:22 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Erst mal vorweg:
Ich bin für jeden konstruktieven beitrag dankbar (und das waren alle hier).
Deshalb auch recht herzlichen dank an TAK.
Ich finde soche Beiträge auch nicht fehl am platze, da es mich evtl auch auf Ideen bringt.
Zugegeben hilft mir die Lösung nciht so weiter, aber der Betrag war sehr gut und ich bin ja schließlich nciht gezwungen detailliert auf den Vorschlag einzugehen. Deshalb von Mir Danke. Ich fands gut und bin froh über eure Hinweise.

@LosseyEx
Es geht bei mir um eine CAD änhliche Darstellung von Maßen und Texten in 2D (stell dir Austocad vor).
Ich erlaube schon eine freie Skaliereung und Einfärbung der Schriften, als auch ein Zoom der Ansicht.
Derzeit läuft es mit wglUseFontOutlines ganz ok und mit 1.5 Sec erstellungszeit für den Font akzeptabel.
Wenn ich aber statt nun statt Ansi Zeichen alles Unicode und auch verscheidene Schriften erlauben will, ergibt das eine große Herausforderuzng wo ich nach dem besten Weg suche.
Ich denk wglUseFontBitmap ist es nicht, somit kannte ich nun noch wglFontOutLine. Was könntest du noch vorschlagen?
Der Manager ist auf jeden fall erforderlich.

User69


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 23, 2010 20:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
user69: Die Frage was du haben willst ist etwas was nur du dir erklären kannst. Hatte ich ja auch nach gefragt. Allerdings so richtig schlau werde ich daraus trotzdem nicht.

Man kann die Ansicht auch Zoomen wärend die Schrift immer gleich Groß bleibt oder in Stufen mitgezoomt wird. In solch einem Fall genügen auch TexturFonts vollkommen. Und dann kannst du die Sachen entweder selbst erstellen oder die TextSuite. Der Manager ist da auch schon dabei.

Wenn die Schrift aber immer genau wie der Zoom mitgezoomt werden soll, dann wird es ohne Vektorfonts nichts. Bedenke aber, dass im Falle eines zu kleinen Zooms dann die Schrift auch unleserlich klein werden kann. Wie du das dann machst dabei kann ich dir nichts sagen. Außer, dass du die Vektordaten erfragen musst, Splines etc. auflösen musst und dann daraus dreiecke erstellen musst. Also im Einfachsten Fall. Ich glaube Noeska hatte irgendwann mal was in die Richtung gemacht oder was auch immer für eine Lösung.

Was du im Endeffekt machst oder brauchst liegt bei dir. Das kann ich nicht entscheiden.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 24, 2010 15:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich dachte immer, dass in den CAD Anwendung die Beschriftung immer gleich groß bleibt. Wenn ich näher ran zoome wird alles größer, außer die Beschriftung die ist immer gleich groß und immer genau so, dass man sie lesen kann.

Ich denke TextureFonts sind schon ne gute, vor Allem auch schnell umsetzbare und einfach zu verstehende Variante. Wenn du die Fonts tatsächlich mitzoomen willst dann kannst du (um zu große Last zu vermeiden) z.B. jede zweite Größenstufe erzeugen, und dazwischen interpolieren.

Falls irgendwie möglich würde ich dir empfehlen Lossys Loader zu verwenden. Der ist von den Ergebnissen her sehr gut. Falls das Technisch nicht geht, kannst du ihn dir ja als Vorlage anschauen. Aber der ist schon recht "sophisticated". ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 13, 2011 16:28 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Ich habe nun mal den Fontmanger umsesetzt und muss sagen das funktioniert super - danke für die Idee.
Somit nutze ich weiter wglUseFontOutlines und bin mit Qualität und Zeit zufrieden.

Nun aber ein Frage zu den Fonts unter Windows für Unicode Zeichen:
Welcher Font funktioniert da sicher?
- Arial Unicode MS ist wohl sehr gut, aber nicht immer vorhanden, da er mit Office ausgeleifert wird
- Arial erzeugt über wglUseFontOutlines keine chinesichen Zeichen (ist ja auch nicht im Font drin).
- Tahoma (was ich auch in der oberfläche verwende) erzeugt mit wglUseFontOutlines und in den TEdit-Feldern chinesische Zeichen, jedoch weiß ich nicht warum und finde keine Erklährung dafür. Außerdem unterscheiden sich die Zeichen in den TEdit-Feldern leicht von denen mit wglUseFontOutlines, was nicht an der Genauigkeit liegen kann. Im Font Tahoma sind keine cinesischen Zeichen (laut Microsoft und Fonteditoren)! Wie funktioniert das dann und kann ich auf allen internationalen Systemen davon ausgehen das es so funktioniert?

Könnt Ihr mir da helfen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 13, 2011 21:00 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ich bin kürzlich über dieses einfache aber schöne Programm gestolpert.
Allerdings geht es nur um eine Textur, und nicht um "echte" Schriften.
Man wählt die Schrift und daraus die Zeichen, die man haben will und es erstellt die Textur und eine Textdatei mit den nötigen Daten, wie Texturkoordinaten, Kerning, etc...
Man muss nur noch eine Funktion basteln, die alles einliest und ein paar Quads in eine Displaylist oder VBO packt.
Und das beste: Es kann mit Unicode umgehen.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 14, 2011 09:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
damadmax hat geschrieben:
Man muss nur noch eine Funktion basteln, die alles einliest und ein paar Quads in eine Displaylist oder VBO packt.
Das nur ist echt sehr süß ausgedrückt. ;) Ich kann nur hoffen, dass die Zusatzinfos die das Tool wegschreibt auch sinnvoll dokumentiert sind. Ansonsten kannst du das zwar einlesen bekommst aber kein anständige Schriftbild hin. In dem Beispielbild auf der Webseite sieht man auch recht schön, dass er zwar Outline verwendet aber die Verbreiterung der Zeichen nicht beim Zeichnen berücksichtigt. Dadurch wirken die Teils etwas zusammengedrückt, wenn sie nicht sogar etwas überlagern. Abgesehen davon sind NUR die CJK Zeichen (20.000 Zeichen) in Arial Unicode schon mal eben 41 Texturen mit 512x512. Das man mit was weiß ich wie vielen Texturen und VBOs lustige Schreib und Aufrufarien hinlegt kommt da auch noch dazu. Speziell wenn da noch Kerning dazu kommen sollte (was er bei mir gerade aber nicht mal exportiert hat).

user69: Das ist eine sehr spannende Frage. Das Arial Unicode Font war ganz früher (Win2k) mal bei Windows dabei. Mittlerweile (XP+) ist es glaube ich nicht mehr dabei. Kann sein, dass es in ganz neuen Windowsen wieder dabei ist. So genau kann ich das nicht sagen, da ich das immer per Hand installiere und deswegen nicht mehr weiß was Original ist. ;)

Arial Unicode darfst du aber nicht weitergeben. Als Alternative gibt es zum Beispiel "Bitstream Cyberbit". Das aber nur für nicht kommerzielle Zwecke. Und die Schrift enthält Serifen. Aber auch die enthält schon nicht so viele Zeichen Arial Unicode. Ich denke aber auch auf speziellen Systemen werden eher so spezial Schriften eingesetzt. Also Schriften die nur 1-2 Sprachen enthalten und für andere Sprachen muss man sich woanders bedienen.

Der Effekt mit deinem TEdit. 100%tig genau kann ich dir das auch nicht erklären. Ich weiß nicht ob es dafür Windows API Befehle gibt. Der Firefox hat aber ein ähnliches Verhalten. Du hast eine Schrift ausgewählt und dann ein Zeichen was in dem Font nicht enthalten ist. Dennoch wird das Font dargestellt. Das liegt aber dann daran, dass dort ein anderes Font benutzt wird. wglUseFontOutlines erzeugt ja nur ein Outline von einem Zeichen eines speziellen Fonts. Du müsstest aber hergehen und überprüfen ob das Zeichen überhaupt in dem Font existiert. Ist das nicht der Fall müsstest du im System nach einer Schriftart suchen die diesen Unicode Unterbereich unterstützt und auch das Zeichen enthält. Wenn möglich sollte die Schrift dann auch Serifen haben wenn deine Hauptschrift Serifen hat oder Serifenlos sein deine Hauptschrift keine hat. Ob es Unterstützung vom System gibt keine Ahnung. Obendrauf kommt ja auch noch, dass dieser Weg mit wglUse* funktienieren muss. Und da wäre ich mir dann nicht so sicher.

Meiner Meinung nach das Einfachste ist es den Leuten die Möglichkeit zu geben das Anzeigefont selbst auswählen zu können. Dann können die Anwender deiner Software selbst ein Font bestimmen und dann auch darauf achten, dass alle Zeichen unterstützt werden. Ich denke damit würden die Benutzer auch leben können. Abgesehen davon können die dann Einfluss drauf nehmen. Wäre also auch noch ein Feature.


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


Wer ist online?

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