Hallo Leute !
Ich kenne mich nicht so gut aus mit Handles und Device Context und dergleichen.
Ich habe einen Funktionsplotter geschrieben, der als Grafikausgabe das Canvas eines TImage benutzt.
Der Grafikteil wurde in eine Klasse ausgelagert, die mir elementare Grafikfunktionen liefert und im Grunde genommen ausgewechselt werden kann mit einer OpenGL-Variante. Das Problem ist, dass dieses Grafikinterface aber auf jeden Fall ein TImage bekommen muss. Das ist kein Problem dachte ich, da ich mir nicht im klaren war, dass OpenGL mit dem Handle von TImage nichts anfangen kann. Es muss doch irgendeinen Trick geben, dass ich doch noch irgendwie OpenGL mit einem TImage benutzen kann ? Hat da jemand eine Ahnung ? Vielleicht gibt es einen Ersatz für TImage, welcher auch für OpenGL geeignet ist ?
Vielen Dank schonmal im Voraus ! Ich bin für alle Vorschläge dankbar !!!
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also um dich mal richtig in eine Zwickmühle zu bringen. OpenGL zeichnet automatisch auf ein Fenster. Mit einem TImage wirst du da nicht viel anfangen können, da du zum Erstellen von OpenGL normalerweise ein Handle auf eine DeviceContext benötigst. Nicht verwechseln mit dem Handle einer Canvas. Ist zwar auch ein HDC. Die sind aber leider nicht kompatibel. Und normal benötigst du dafür ein richtiges Fensterhandle.
Es gibt eine Möglichkeit die mir so spontan noch einfällt. Verdammt dreckig aber könnte klappen. Beim Initialisieren deiner Klasse übergibst du ein TImage und dann erstellst du ein Panel welches das TImage komplet überdeckt. Und schon kannst du mit dem Panel OpenGL benutzen.
Allerdings als professioneller Entwickler lege ich dir sehr ans Herz, dass du deine Schnittstelle änderst. Da OpenGL auch vom Zeichnen her nicht so ganz (eigentlich so überhaupt nicht) mit GDI kompatibel ist. Besonders dann, wenn du in OpenGL 3D machen willst wärend du in GDI 2D benutzen möchtest. Dann steckt man normal in einer konzeptionellen Zwickmühle.
Zum Thema ersatz kannst du ein TPanel oder ein TWinControl benutzen. Auf beiden kannst du mittels Canvas (muss noch als Property nur noch sichtbar gemacht werden) zeichnen.
Strukturel sollte es eigentlich genügen wenn du eine Abstracte Basisklasse definierst und 2 Ableitungen dieser Klasse erstellst. Eine für GDI und eine für OpenGL. Dann brauch dich nämlich nur noch beim erstellen der Klasse (üblicherweise nur 1 Mal) zu interessieren was es bekommt. Aber ich zeichne generell immer auf ein Panel. Vor allem bei GDI.
Hi !
Die Sache mit dem Panel raufpacken ist eine sehr gute Idee, werd ich gleich ausprobieren.
Dreckig ist das wirklich, da schließe ich mich dir an, aber daran ist die Gesamtkonzeption schuld und die kann ich halt nicht mehr ändern.
Die Inkompatibilität zwischen OpenGL und GDI ist mir auch klar. Genau aus dem Grund habe ich ja die Grafikklasse überhaupt programmiert. Sie soll Standardprozeduren liefern zum zeichnen, die je nach Wunsch in OpenGL, in normale Canvas-Zeichenfunktionen oder auch DirectX übersetzt werden sollen.
Normaler Weise zeichne ich ja auch auf ein Panel, beim nächsten mal mach ichs besser !
möchte mich an dieser Stelle auch mal bedanken, weil du mit dieser Antwort auch gleich mein Problem gelöst hast . Ich bin gerade am Anfang der 3D-Entwicklung, und war noch unschlüssig, ob ich DirectX oder OpenGL verwenden soll. Da ich aber auf diversen DirectX-Foren seit Tagen keine!!! Antwort bekommen habe, und hier ohne Frage schon die Lösung finde, ist das für mich nun (zur Freude meiner Bekannten) erledigt.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.