Zitat:
Daraus ersehe ich das es richtig ist.. oder was meinst mit bähhhh
Okay. So im nachhinein muss ich gestehen war das etwas unglücklich formuliert. Ich meinte, dass es richtig bähh ist.
Denn du hast ziemlich viele Matrixoperationen die vermutlich alle gar nicht nötig sind. Und um mal eine Hausmarke zu nennen. Vor 2-3 Jahren hatte ich mal was gemessen. In einer 3D Anwendung dann ein Mal in den Orthomodus gewechselt und wieder zurück. Sonst nichts. Und die FPS ging um ca. 10% runter. Keine Ahnung ob sich das heute noch genau so verhält aber ich denke ja.
Auch nicht vergessen solltest du, dass du noch eine
GUI haben willst und wenn du noch 1-2 weitere Texte ausgeben willst, dann wechselst du mal eben locker flockig 4 Mal zwischen den Ansichten. Aber genau genommen würde auch folgendes ausreichen. Das ist jetzt auch ein Stück aus dem Anhang.
Delphi-Quellcode:
procedure TMainForm.FormPaint(Sender: TObject);
begin
// Hier setzt du die Perspektive
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45, ClientWidth / ClientHeight, 1, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
// Hier rufst du deine Visualisierung auf.
...
// Hier ortho
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,fWidth,0,fHeight,-100,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Text ausgeben
glPushMatrix;
// leider in der version noch nötig aber ab der echten 0.8 nicht mehr
glTranslate(...);
tsTextOutA('
Blahh');
glPopMatrix;
// leider noch
// Text ausgeben
// Gui zeichnen
CheckError;
SwapBuffers(fDC);
end;
Damit kommst du mit einem einzigen glOrtho aus. Und warum funktioniert das genau so? Weil du zu Begin des Zeichnens IMMER die Perspektive setzt. Wenn alles 3D fertig gezeichnet ist kannst du die Ansicht auf 2D umstellen. Aber du brauchst sie nicht speichern und wieder zurücksetzen. Warum auch? Bei nächsten Frame setzt du sie ja sowieso wieder. So wie es in dem Anhang ist funktioniert das sicherlich auch. Allerdings machst du viel viel mehr als überhaupt nötig ist. Du sicherst Dinge und stellst sie wieder her obwohl sie gar nicht mehr benutzt werden. Und mit jedem Text steigt der Aufwand.
Ich hoffe ich konnte es damit etwas besser verdeutlichen.
Zitat:
dann verändert sich der text in der größe nicht.
Mal anders gefragt. Was genau hast du vor? Der Text soll proportional zur Größe des Fensters bleiben? Das ist nicht ganz so einfach. Bzw kann man dort sehr schnell grafische Mängel bekommen. Denn bei dem Text handelt es sich um Texturen ohne MipMapping. Und das verhält sich wie jede andere Textur auch. Wird sie größer dargestellt wird sie weich und sieht mitunter nicht mehr so scharf aus. Wird sie kleiner dargestellt, dann liegen einige Texel auf dem selben Pixel und
OpenGL nimmt dann irgendeines.
Obendrein kommt noch die Art meines Zeichnens hinzu. Diese ist für pixelgenaue Darstellung ausgelegt und bei Vergrößerungen kann es passieren, dass die Interpolation von
OpenGL abgeschnitten wird bzw die Zeichen teilweise ineinander fließen. Aber das könnte man bei einfachen Texten mit einem kleinen Trick umgehen.
Ich sage nicht, dass es unmöglich ist. Sondern, dass es mit gewissen Risiken verbunden ist. Bzw in diesem Fall mit grafischen Einschränkungen. Denn es sieht nur wirklich richtig gut aus, wenn man Pixelgenau arbeitet. Und das ist nicht nur auf die Font Bibliothek beschränkt sondern ein generelles Problem. Deswegen wäre es vermutlich praktisch, wenn du mal genau sagst was du eigentlich damit vor hast.
PS: Im übrigen ist die Größe 14 nicht vergleichbar mit der Schriftgröße 14 innerhalb von Windows. Dazu müsste dieser Wert von logischen Pixeln auf die aktuellen DPI gerechnet werden.