2D MipMapping in OpenGL?
lima-city → Forum → Programmiersprachen → C/C++ und D
achse
bildschirm
buchstabe
code
einstellung
erzielen
glauben
hilfe
level
lineares filtern
matrix
objekt
paar
pixel
sagen
text
textur
url
zeichen
zusammengefasst code
-
Ich arbeite grad an einer Schrift bzw. Text Funktion für eine Anwendung. Die einzelnen Zeichen werden über FreeType in der Größe 100 p (größe variiert je nach Zeichen) gerendert, an die GPU geschickt und dann in Display Listen verwendet. Das klappt auch alles schön und gut. Aussehen tut es auch gut, zumindest wenn die Zeichen so groß dargestellt werden wie sie über FreeType gerendert wurden und bei einer render größe von rund 100 Pixeln pro Buchstaben ist das auf dem Bildschirm sehr groß. Also skalier ich sie über glScalef einfach runter nur dann sieht die Textur auf dem Buchstaben bzw. der Buchstabe selber verpixelt und kanntig aus und genau das ist mein Problem.
Ich hab es schon mit verschiedenen Textur Parametern versucht nur da hat sich eigentlich garnix geändert. Mit MipMaps hab ich es auch schon versucht nur da scheint die Texture die verwendet immer gleich zu bleiben was wohl daran liegt das der Text nur skaliert wird und sich nicht von der "Kamera" entfernt.
Hat jemand einen Vorschlag was ich machen könnte? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo krisi12345,
nachdem glScalef() ja nur die Modelview-Matrix (oder aber die Projektions-Matrix) manipuliert sollten die Effekte, wenn überhaupt, mit Hilfe der normalen blending/antialiasing Einstellungen bzw. über lineares Filtern der Textur zu erzielen sein.
Ich glaube eigentlich, dass Du das sowieso alles schon kennst, aber hier noch mal zusammengefasst:
Bei den Texturen selber könnte man noch folgendes versuchen (direkt nach glTexImage2D()):/* anti-aliasing */ glEnable (GL_LINE_SMOOTH); /* blending */ glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* ein paar hints, die vielleicht einfluß haben: */ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST);
Ob irgendwas davon etwas bringt kann ich leider nicht sagen. Aber eine Versuch sollte es wert sein.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
Viel Erfolg! -
darkpandemic schrieb:
Hallo krisi12345,
nachdem glScalef() ja nur die Modelview-Matrix (oder aber die Projektions-Matrix) manipuliert sollten die Effekte, wenn überhaupt, mit Hilfe der normalen blending/antialiasing Einstellungen bzw. über lineares Filtern der Textur zu erzielen sein.
Ich glaube eigentlich, dass Du das sowieso alles schon kennst, aber hier noch mal zusammengefasst:
Bei den Texturen selber könnte man noch folgendes versuchen (direkt nach glTexImage2D()):/* anti-aliasing */ glEnable (GL_LINE_SMOOTH); /* blending */ glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* ein paar hints, die vielleicht einfluß haben: */ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST);
Ob irgendwas davon etwas bringt kann ich leider nicht sagen. Aber eine Versuch sollte es wert sein.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
Viel Erfolg!
Durch glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); in Kombination mit MipMaps wurde das Ergebnis ein bisschen besser wobei sich ja dann nur die Qualität der MipMaps verbessert aber das bringt auch nicht viel da ja nur ein MipMap/Textur verwendet wird.
AA bezieht sich wenn ich mich nicht irre nur auf Polygonen bzw. ihre Ränder/Linien und nicht auf ihre Texturen und Textur Kompression verwende ich nicht.
Die letzten beiden Befehle von dir verwende ich bereits aber nach dem glTexImage... aufruf würden oder dürften sie eigentlich garkeine Wirkung mehr haben.
P.S.: Hast du vielleicht ne Ahnung wo von es abhängt welches MipMap Level auf einem Objekt gerendert wird Denn auch wenn ich meinen Text bei der Z Achse um 100 nach hinten verschiebe (macht bei glOrtho ja keinen sehbaren Unterschied) bleibt das MipMap level gleich. -
krisi12345 schrieb:
...
Hast du vielleicht ne Ahnung wo von es abhängt welches MipMap Level auf einem Objekt gerendert wird Denn auch wenn ich meinen Text bei der Z Achse um 100 nach hinten verschiebe (macht bei glOrtho ja keinen sehbaren Unterschied) bleibt das MipMap level gleich.
Hallo krisi12345,
eigentlich kann ich es auch nicht sagen. Aber wenn Du die orthogonale Projektion verwendest, dann ändert sich die Größe des Objektes ja nicht, weshalb sich wahrscheinlich auch das MipMap Level nicht ändert.
Eigentlich sollte es ja, grob ausgedrückt, so sein, dass bei einer perspektivischen Projektion erst berechnet wird, wie viele Pixel interpoliert werden müssten um ein Pixel auf dem Bildschirm zu füllen. Bei nahen Objekten sind das weniger als bei entfernten Objekten. Und je nachdem wird dann die MipMap mit der Interpolation genommen, die der mathematisch korrekten am ehesten entspricht.
Zumindest würde ich das als das brauchbarste Verfahren ansehen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage