Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Ich habe (mit Hilfe von Vorlagen) eine Komponente zur Textausgabe geschrieben. Es klappt auch alles ganz toll bis auf eine Sache: wenn ich die Funktion glFont.Print (...) ausführe, verändert sich die Projektionsmatrix. Ich habe vorher alles schön perspektivisch dargestellt und habe es nach der Ausführung von CallLists im 2D Modus ohne tiefe etc. vor mir. Das habe ich ausprobiert, indem ich die Zeile mit CallLists auskommentiert habe. Ist sie auskommentiert sieht alles toll aus. Wenn nicht dann halt nicht. Ich habe mal den Code der Komponent eingefügt.
Wenn jemand das gleiche Problem schon mal hatte oder so weiß wodran es liegt, dann schreibt mir bitte.
Ich hjabe schon extra Prozeduren zum sichern und zurückspeichern aller Matrizen geschrieben (PushAll und PopAll) aber das bringt leider auch nichts.
Code:
unit glFont;
interface
uses
Windows,
Graphics,
SysUtils,
Classes,
Controls,
Dialogs,
Forms,
OpenGLUtil,
DglOpenGL;
type
TPglFont=^TglFont;
TglFont=class(TComponent)
private
FFont: HFONT;// Windows Font ID
FFontList: GLUint;
FFontgmf :array[0..255]of GLYPHMETRICSFLOAT;// Address Buffer For Font Storage
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also...ich hatte das vor einiger Zeit auch mal benutzt. Der Code sah so ähnlich aus...ich kann jetzt nicht nachvollziehen, wieso deine Push&Pops net greifen....
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
die stacks haben nur ne begrenzte größe. ist es möglich dass noch irgendwo anders die matrix gepusht wird und nicht zu rechten zeit wieder gepopt? in dem fall würden push und pop nämlich wirkungslos bleiben.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
An die Stacks hatte ich auch schon gedacht und habe versucht das nachzuvollziehen. Das scheint in Ordnung zu sein. Das komische ist, dass ich den Projektionsmodus nicht mehr auf Perspektive umschalten kann. Wenn ich einmal den Befehl CallLists aufgerufen habe, bleibt mein System immer im Ortho-Modus.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Ich habe mal ein bisschen rumprobiert und herausgefunden, dass der Befehl "glPushAttrib (GL_LIST_BIT) " nicht richtig war. man muss stattdessen "glPushAttrib (GL_ALL_ATTRIB_BITS)" ausführen. Hier wird bestimmt einiges weggesichert was man nicht sichern braucht aber ich habe keine Lust jetzt jedes einzelne Attribut zu testen.
Hier der Funktionierende Code un eine kurze Anleitung zum Gebrauch (funktioniert jetzt einwandfrei):
Code:
unit glFont;
interface
uses
Windows,
Graphics,
SysUtils,
Classes,
Controls,
Dialogs,
Forms,
OpenGLUtil,
DglOpenGL;
type
TPglFont=^TglFont;
TglFont=class(TComponent)
private
FFont: HFONT;// Windows Font ID
FFontList: TGLUint;
FFontSize:integer;
FFontThickness:integer;
FFontWidth:integer;
FFontgmf :array[0..255]of GLYPHMETRICSFLOAT;// Address Buffer For Font Storage
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.