ein paar Freunde und ich wollen für den Infounterricht eine kleine Grafikdemo schreiben (niedriged Niveau) und kommen damit bisher gut voran. Einige Szenen sind schon eingebaut, zeitlich ist alles getimet. Nun ist einer auf die Idee gekommen, dass wir doch einen FPS counter einfügen könnten. Da das Programm im Vollbild läuft, war meine Idee die FPS als Schrift in obere rechte Ecke des Bildschirms zu setzen. Mithilfe einiger Templates bastelten wir uns dann was zusammen, was auch funktionert; für ungefähr 0,5 Sekunden, bevor der Counter verschwindet und die Primitve anfangen zu flackern. Ich poste hier mal ein paar Teile des Quellcodes, sollte der volle zur Problemlösung gebraucht werden, kann ich ihn auch posten:
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Ja. Gleich beim Überfliegen. Welchen Sinn macht das Swapbuffers(DC); in der ShowFPS? Dies führt dazu, dass die OpenGL-Ausgabe erfolgt und dann später nochmals, wenn die Szene gerendert wird, jedoch ohne ein glClear zuvor, womit vermutlich das richtige angezeigt wird. Das Swapbuffers entfernen wird vermutlich dein Problem lösen.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das ShowFPS ist in diesem Zustand im übrigen mit Vorsicht zu genießen. Egal was vorher eingestellt ist setzt die Methode stupide den OrthoModus. So wie ich es aber einschätze soll der Rest in der Perspektive sein. glViewPort muss in dem ShowFPS auch nicht aufgerufen werden.
Code:
procedure TForm1.ShowFPS;
var Text :string;
begin
glMatrixMode(GL_PROJECTION);
// Existierende Projektion sichern.
glPushMaxtrix;
// Neue Ansicht einstellen
glLoadIdentity;
glOrtho(0,1024,768,0,-1,1);
glMarixMode(GL_MODELVIEW);
glLoadIdentity;
glColor3f(1,1,1);
Text:=FloattoStr(FPS);
glRasterPos3f(0.5,0.8,0);
ShowText(Text);
// "Alte" Projektion wieder herstellen.
glMatrixMode(GL_PROJECTION);
glPopMaxtrix;
end;
Modelview muss nicht gesichert werden, da sie danach eh überschrieben wird. Sollte das Show irgenwann mal in der Mitte aufgerufen werden und die Modelview Matrix sollte dann erhalten bleiben so müsste sie auch mit gescihert werden.
Okay dank Lossey Ex geht es jetzt, ich musste nur noch den Buffer vor dem aufruf von ShowFPS leeren und nicht danach. Das einzige was mich jetzt noch schafft ist die Position des Counters. Er ist in der oberen, linken ecke, allerdings wird nur ein kleiner Teil von ihn angezeigt. Als ich nun die y-Koordinate das Rasters verringern wollte, damit das ganze in bisschen nach unten rutscht, ist garnichts passiert, außer das ab dem Wert 0 der ganze Counter verschwindet.
Was mache ich falsch?
btw: @Frase: Hätte ich nicht im Template nachgeschaut hättet ihr alle wieder gesagt: "Schau doch einfach im Template nach."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die Rasterpostion ist die untere linke Ecke des Textes. Damit dein Text also richtig sichtbar ist musst du als Y mindestens die Höhe deiner Schrift angeben. Wenn der Orthomodus auch der Auflösung deines Fensters entspricht. Anderenfalls wird es ein wenig schwieriger den Text Pixelgenau zu positionieren. Aber ich denke mal für X ist 5 und für Y 20 - 23 ein guter Wert um den Text oben Links darzustellen.
Mitglieder in diesem Forum: 0 Mitglieder und 11 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.