ich habe ein recht merkwürdiges Problem. Ich möchte in einer Demo Selektion und Textausgabe kombinieren. In meiner Render-Routine rufe ich die Prozedur 'ShowText' auf. Innerhalb dieser Routine sieht es so aus:
Code:
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0,640,480,0,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
If Frameanzeige =TrueThen
Begin
PrintText(5,200,'FPS: '+IntToStr(FPSFrames));
End;
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
Wenn die Variable Frameanzeige True ist, der Text also ausgegeben wird, funktioniert die Selektion nicht mehr. Ist die Variable False, ist bei der Selektion alles in Ordnung.
Was hat die Textausgabe mit der Seletkion zu tun frage ich mich...und wie kann ich beides in einem Programm anwenden? Merkwürdig...
Dein erster Hinweis kann nicht stimmen. GL_ORTHO wird ja auch dann gesetzt, wenn der Text nicht angezeigt wird. Also der Orthomodus selber schadet wohl nicht, erst die Textausgabe macht die Selektion kaputt.
Punkt zwei könnte funktionieren, ist allerdings etwas umständlich Gibt es da keine bessere Lösung?
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Ich weiß leider nicht wie deine Funktion PrintText aussieht und kann daher nur spekulieren. Vielleicht veränderst du in dieser Funktion deine Modelviewmatrix. Speichere sie am besten vor dem Aufruf der Funktion und setze sie anschließend wieder zurück:
If Frameanzeige = True Then
Begin
glPushMatrix;
PrintText(5, 200, 'FPS: ' + IntToStr(FPSFrames));
glPopMatrix;
End;
In deinem konkreten Fall müsste sogar ein Aufruf von glLoadIdentity nach dem Aufruf von PrintText ausreichen. Wenn das Problem damit nicht gelöst ist zeige uns doch bitte mal die Funktion PrintText.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also was ich schon festgestellt habe deckt sich mit dem i0n0s auch sagte. Sobald du in den Orthomodus wechselt war dann immer das Ergebniss von der Selektion total komisch und hat vorne und hinten nicht mehr hingehauen. Also am Besten entweder nur Perspektive oder Ortho.
Und zum Thema Selektionspezifisch. Ja es gibt ne ganz simple Lösung. Im Selection Artikel im Wiki ist ein Stück Code beim Zeichnen. Und dort solltest du dir mal die Variable RenderMode ansehen. Das kannst du bei OpenGL abfragen und dann brauchst du nur noch den Inhalt der Variable abprüfen. Nichts was von Außern irgendwie gesteuert werden muss.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du kannst mithilfe von glGetIntegerv(GL_RENDER_MODE, @RenderMode); abfragen in welchem Rendermode sich OpenGL befindet. Es gibt 3 Rendermodes. GL_RENDER, GL_SELEKTION, GL_FEEDBACK.
Und bei allem was nur beim echten Rendern gezeichnet oder ausgeführt werden soll prüfst du vorher ab ob in der Variable RenderMode ein GL_RENDER enthalten ist.
Code:
var
RenderMode:Cardinal;
begin
glGetIntegerv(GL_RENDER_MODE,@RenderMode);
// Zeichnen
if(RenderMode = GL_RENDER)
then SwapBuffers (FDC);
end;
Swapbuffers ist ja etwas was nur beim Zeichnen aufgerufen werden sollte. Also kann man das so ausklammern. Mit genau der gleichen abfrage kannst du auch dein komplettes 2D weglassen. Und der Vorteil dabei ist, dass niemand von Außen sagen muss, dass du im SelektionMode bist. Das ist ja eine Info die man einfachst abfragen kann.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.