Ich habe eine kleine 3D Szene und möchte dazu einen Graphen zeichnen lassen. Da ich keinen Platz für ein Bitmap-Control habe, möchte ich den Graphen über die 3D Szene legen, aber komplett 2D, irgendwo in einer Ecke. Geht das überhaupt? Also 3D und 2D gleichzeitig? Gibts irgendwo ein simples Tutorial? Im Prinzip brauche ich sicher nur simple Befehle wie LineTo oder SetPixel oder so. Danke für Eure Hilfe!
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
schau dir mal dieses tutorial an.Im wesentlichen brauchst du den Befehl glOrtho um die Projektionsmatrix auf eine zweidimensionale Projektion zu setzen. Dort kannst du dann ganz normal rendern
OK, danke. Leider hab ichs nicht so mit den Matrix-Modi. Mein Programm zeigt bereits die 3D Szene an. Die Initialisierung läuft in Init-Prozeduren ab, das Zeichnen in einer Extra-Procedure. Wie füge ich nun dieser Procedure meinen Ortho-Modus an? Skizze:
Code:
[DrawScene]
glTranslate...
glBegin()...glEnd()
...
glOrto()
...
glOrtho muss ich irgendwo ja auch wieder beenden oder? Denn im Moment zeigt er mir nichtmal mehr die 3D Szene an, wenn ich das komplette
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Genau so wie du in den Orthomodus schaltest kannst du auch wieder in den Perspektivenmodus zurückschalten:
Code:
//in den Perspektivenmodus schalten
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(...)
//erneut die Modelviewmatrix "aktivieren"
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
//3D Szene zeichnen
//in den 2D-Modus schalten
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0,640,0,480,0,128);
//erneut die Modelviewmatrix "aktivieren"
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
//2D Szene zeichnen
Du kannst beliebig oft umschalten. Benötigst du die alte Perspektiven- und Modelviewmatrix nach Verlassen des 2D-Modus erneut so kannst du auch mit glPushMatrix und glPopMatrix arbeiten.
_________________ 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
Es funktioniert leider nicht so einfach. Zuerst einmal, es handelt sich bei mir um C++ Code, am besten poste ich mal alles OpenGL-nötige. Vielleicht muss ich meinen 2D Aufruf woanders starten. Ich habe alles in der Klasse COpenGLCtrl stehen:
Code:
// called upon WM_CREATE
int COpenGLCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Mit glLoadIdentity setzt du die aktuelle Matrix wieder auf die Identitätsmatrix zurück. Damit geht dir quasi deine "Kameraausrichtung" verloren, die du ja in OnDraw setzt. Du kannst OnDraw getrost in jedem Renderdurchlauf aufrufen, denn der Geschwindigkeitsverlust ist vernachlässigbar klein.
Ruf' einfach mal OnDraw nach dem glClear in deiner OnTimer-Funktion auf und probier ob es dann geht.
Außerdem kannst du dir eine Menge der glPushMatrix und glPopMatrix-Aufrufe sparen, da sie teilweise unnötig sind.
_________________ 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
Hmmm seltsamer wirds, aber vielleicht kommt man so auf die Lösung. Ich habs jetzt mal etwas minimiert und einfach mal nur die Matrizen gewechselt. Das klappt alles. Dann habe dieses hier gemacht:
Ich habe glOrtho mal nicht ausgeführt und am Ende trotzdem gluPerspective neu gesetzt. Was passiert? Er zeichnet ein rotes 3D-Viereck, das man sehr kurz sieht, dann verschwindet es, als wenn sich die Kamera wegbewegt. Kommentiere ich gluPerspective aus, bleibt das rote Viereck stehen. Also stimmt etwas mit meinem gluPerspective nicht. Nur was? Es sieht genauso aus wie mein erster Aufruf in AdjustViewport weiter oben. Addiert sich da was auf mit mehrmaligem Aufruf?
Hmmmmm nun läufts... da fehlten Klammern um die LoadIdentities Aber wieso bringt der Compiler da nicht einfach einen Error... macht er doch sonst auch, wenn Klammern fehlen tztztz. Naja jetzt klappts, danke
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.