Ich habe mal ein bischen über
OpenGL gelesen.
Infos findet man vor allem hier:
http://www.delphigl.com/
Und in der
DP habe ich einen alten Kurs gefunden:
http://www.delphipraxis.net/5347-opengl-kurs.html
(Nachträglichen Dank an Mr_T!)
Zur Klärung einiger Fragen habe ich das Konzept aber noch nicht verstanden. Ich werde am Wochenende noch einige Turorials lesen, aber vielleicht kann ja wer schon mal kurz und knackig zu etwas Erleuchtung beitragen?
1) Rendern im Mainthread
Das Rendern wird über Timer oder OnIdle laufend erledigt und das fertige Abbild mit SwapBuffers auf das Formular geklatscht.
In der Renderfunktion wird ein Würfel gezeichnet, gestretcht und gedreht und wird somit dargestellt. Alles paletti.
Wenn ich aber eine riesige Welt habe kann ich doch nicht in der Renderfunktion alle Objekte berechnen. Prüft man daher erst, ob sich das Objekt oder Würfel nah genug an der aktuellen Kamera befindet?
2) Maus
Kann man (ähnlich der
VCL) ermitteln, über welchem Objet und an welcher Position genau sich die Maus befindet? Ich stelle mir das schwer vor, da ein Objekt ja gedreht, gekippt und scaliert sein kann.
Kann man mit vertretbarem Aufwand irgendwie ein Drag&Drop realisieren und kann ich einem Objekt beibringen, dass es unter Umständen für die Maus transparent sein soll (dass also z.B. ein DragOver vom dahinter liegenden Objekt verarbeitet würde)?
3) Tastatur + TextCursor
Wenn man so eine Art Edit oder Memo basteln wollte ... ist so etwas denkbar bzw. gibt es bereits grundlegende Funktionalitäten, die dabei unterstützen? In GLScene gibt es ja solche Komponenten, aber könnte man das mit vertretbarem Aufwand auch selbst realisieren?
4) Businesslogik und Threads
Einen Würfel zeichnen und über Timer drehen lassen ist ja schön und gut. Aber für eine echte Anwendung ist das m.E. kein schlüssiges Konzept.
Wenn meine Drehfunktion z.B. 1 Minute brauchen würde, dann würde meine Anwendung 1 Minute hängen, genau wie in diesem Fall die
VCL.
Ich dachte - so meine bisherige Unterstellung - in einer Grafikengine würde ein anderes Konzept vorliegen, dass also die Darstellung auf der Zeichenfläche vom Ablauf der Anwendung (Businbesslogik) stärker entkoppelt wäre.
Wenn ich mit meiner Figur eine Mauer einrenne und ein paar Feuerkugeln werfe, fallen ja die Mauersteine runter und die Feuerkugeln vernichten alle Monster. Wie wird so etwas denn dann i.d.R. verarbeitet? Läuft dann ein MauereinsturzThread bis alle Steine unten liegen und währendessen kann ich im Mainthread meine Figur weiter steuern? Müsste man also aufwendigere Aktionen auch immer in eingenen Threads ausführen damit das Formular nicht einfriert? (Wenn ich gerade so drüber nachdenke wird es wohl so sein, da Windows sonst ja sicher schon selbst das Formular als inaktiv erkennt - oder?).
Insofern ist mein Versuch
hier vom Ansatz her wahrscheinlich doch nicht so falsch gewesen - wobei die
VCL dafür nicht wirklich taugt.