![]() |
Hmmm, also OpenGL liesst sich zumindest als doch machbar in sich.
Was ich noc nicht verstehe ist: wie kriege ich Delphi dazu, OpenGL zu benutzen? Also welche zeilen muss ich schreiben damit das genommen wird und wie geht es dann weiter, kann ich dann die OpenGL-befehle einfach so hinschreiben oder müssen die noch "Delphisiert" werden? Mein Problem ist, ich bin kein Programierer, ich habe nicht wirklich den Überblick wie man Objekte erstellt (so dass es auch funktioniert), was genau eine Klasse ist usw, irgendwie hat das nie Geklappt. Ich kann einfach sehr gut logisch denken und auf TCanvas sah das ND auch wirklich brauchbar aus und hat sich Variabel-äbhängig bewegt, nur war es hat grottenlangsam. Gruss Phil |
Hallo!
Schau doch mal bei NeHe nach. Dort sind meines Wissens nach alle Tutorials auch in delphi vorhanden. MfG Stephan |
Hallo Phil,
> Was ich noch nicht verstehe ist: wie kriege > ich Delphi dazu, OpenGL zu benutzen? > Also welche zeilen muss ich schreiben damit das genommen > wird und wie geht es dann weiter, Genau das nimmt dir z.B. die cgLib von www.delphi3.net ab. Ich vermute, daß deren aktueller Nachfolger, DOT, das genau so macht. Konkret passiert folgendes: standardmäßig ist das Hauptfenster einer Applikation ein Nachfolger der Klasse TForm. In cgLib für Delphi wird das durch TcgForm ersetzt. TcgForm ist eine Klasse, die mit TForm identisch ist, aber beim Initialisieren den OpenGL- spezifischen Code hinzufügt. Das ist Systemprogrammierung, die dich nicht zu interessieren braucht (Stichwort: Pixel Format Descriptors) und die deswegen komplett in der Klasse TcgForm versteckt wird. Bei DOT wird es ähnlich sein. Alles, was du als Programmierer tun muß, ist TFlightInstrumentsForm = class(TForm) durch TFlightInstrumentsForm = class(TCGForm) zu ersetzen. Dann fehlt nur die Initialisierung von OpenGL. Bei cgLib wird das durch den Befehl "InitGL" erledigt, der in der Standard- Routine "FormCreate" aufgerufen wird. (FormCreate wird von Delphi ja immer dann erzeugt, wenn du bei TForm / TcgForm das Event "OnCreate" definierst.) Die komplette Initialisierung von OpenGL sieht bei mir so aus: // OpenGL initializations InitGL; // this is specific to the Delphi OpenGL headers. // OpenGL initialization code concering 2D projections glLoadIdentity(); glViewport(0, 0, ClientWidth, ClientHeight); glMatrixMode(GL_MODELVIEW); glOrtho(0, 1.0*displaySize, 0, 1.0*displaySize , -1, 1); Das ist alles. glLoadIdentify setzt das Koordinatensystem zurück, glViewport definiert, in welchem Bereich von deinem Fenster zu zeichnen willst, und der Rest definiert Kamera- position und 2D-Koordinatensystem mit dem Größenbereich x = 0..displaySize, y = 0..displaySize Fertig. ;) > kann ich dann die OpenGL-befehle einfach so hinschreiben > oder müssen die noch "Delphisiert" werden? Das ist das Schöne. Wenn du Delphi erst einmal initialisiert hast, dann kannst du alle Delphi-Befehle auf allen Systemen und Sprachen identisch verwenden. Da muß nichts angepasst werden. Das ganze sieht dann z.B. so aus, am Beispiel des PLIs, der anzeigt, bei welchem Pitch-Winkel der Stall einsetzen würde (B747-400 PFD): Zitat:
am Anfang werden nur Linien (GL_LINES) gezeichnet. glVertex2f (2f = 2 Floating Point Numbers) sind einfach Vektoren, die Anfangs- und Endpunkte jeweils einer Linie angeben. Das Ganze wird in Gelb (glColor3f(1,1,0) mit RGB = 1,1,0) gezeichnet. Viele Grüße, Markus |
Hallo,
danke für die Links. Die sind wirklich sehr interessant! Ich habe mal flüchtig gelesen, dass Fonts unter OpenGL leicht problematisch wären. Markus, Du solltest damit doch schon Erfahrungen gemacht haben. Ist das wirklich ein Problem oder nur ein Gerücht? Gruss, Ollie. |
GEILLLLL, ich fange an es zu verstehn, sollte echt kein Hexenwerk sein.
D.H. die cgLib fügt Delphi eine Komponente hinzu die OpenGl "kann", richtig? Das fenster ist dann einfach vom Typ TCGForm, richtig? (z.b. anstatt TForm mit TCanvas drauf) subbigeil, jetzt muss ich nur noch warten bis meine BU rum is dann setz ich mich damit echt mal auseinander, mal schaun, vllt krieg ich ja ne vernünftige Freeware hin ;) wie schauts denn aus mit Aktuellen FSUIPC-Offsetlisten? Ich hatte immer das problem, dass ich die Longitide und Latitude koordinaten mit so nem riesen Schlüssel umrechnen musste was zu nem Fehler geführt hat weil der Variablenspeicher zu klein war oder so. Gruss Phil |
Hallo Ollie,
> Ich habe mal flüchtig gelesen, dass > Fonts unter OpenGL leicht problematisch > wären. Markus, Du solltest damit doch > schon Erfahrungen gemacht haben. Ist das > wirklich ein Problem oder nur ein Gerücht? das ist so schon richtig und kein Gerücht. OpenGL bringt von Haus aus wenig bis keine Unterstützung für Fonts mit. Im wesentlich muß man "selbst" Objekte (Bitmaps, Texturen oder Vektorlisten) definieren, die man später als einzelne Buchstaben verwenden kann. Es gibt jedoch einige Bibliotheken, die einem Programmierer diese Arbeit abnehmen. Gerade unter Windows gibt es einen Befehl, der Truetype-Fonts (praktisch alle Windows-Standardschriftarten) in Vektorlisten umwandelt. Die cgLib (cgFont) von Delphi3d.net versteckt auch hier wieder die Details vor dem User. Man sollte aber die Grundlagen kennen. Ich habe eine Weile gebraucht, bis ich meine Probleme gelöst hatte. Letztlich habe ich einen für mich idealen Font ausgewählt und die cgFont-Bibliothek ein wenig modifiziert und bin inzwischen sehr zufrieden damit. Markus |
> D.H. die cgLib fügt Delphi eine
> Komponente hinzu die OpenGl "kann", > richtig? Das fenster ist dann einfach > vom Typ TCGForm, richtig? (z.b. anstatt > TForm mit TCanvas drauf) Genau. Streng genommen ist es sogar nur eine einfache Unit, die man nicht als Komponente installieren muß ,sondern nur mit "uses" einbinden muß. Aber das sollte eigentlich alles aus den Programmbeispielen sehr schnell klar werden. Markus |
Hi!
Ja, fonts sind sicherlich unter OpenGL ein heißes Thema. Das Rendern der Schriften kann zum bottleneck werden. Hier ist eine gute Beschreibung der bereits vorhandenen Font libs für OGL: http://www.opengl.org/resources/features/fontsurvey/ Falls man unter Windows bleibt würde ich WGL empfehlen. MfG Stephan |
> Falls man unter Windows bleibt würde ich WGL empfehlen.
:D Genau das tut die cgFont-Unit für Delphi von delphi3D.net. Das wird geschickt vor dem User versteckt, aber wenn man sich den Quellcode anschaut, passiert genau das: ein Aufruf von wglUseFontOutlines. Markus |
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag