Ich habe angefangen, mich mit opengl zu beschäftigen, und bin dabei ein "einfaches" Interaface zu basteln.
Nun stosse ich aber auf ein Problem, wo ich bisher nichts gefunden habe. Es geht um das Einbinden von Grafiken
in meiner Oberfläche. Die Grafik habe ich in den Anhang gelegt.
Folgende Situation:
Ich habe ein Bild interface.jpg (Größe: 1024 x 768)
Dieses Bild möchte ich gerne in die Gl-Scene einbinden.
Wie mache ich das?
Viele Grüße
David
P.S. Ich hoffe, dass die Frage nicht allzu bescheuert ist.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Bitte benutzt aber nicht die Glaux zum Texturen laden. Die ist alt umständlich und doof. Alternativen siehe hier. Ich empfehle natürlich den Obersten. Ist ja klar.
Als erstes solltest du die Textur bearbeiten. Damit kannst du momentan noch nichts anfangen. Im DF habe ich ja gesehen, dass du da gerne einen Planeten reinbasteln möchtest und dass sie im Vordergrund sein soll. Also musst du der Textur beibringen, dass sie an gewissen stellen Transparent sein sollst. Das kannst du Mittels Ebenenmaske im Gimp und PhotoShop. Also entsprechend das was durchsichtig sein soll musst du Transparent machen. Speichern musst du die Textur dann als TGA.
Zum Rendern gehst du dann folgendermaßen vor. Du zeichnest deine Szene. Im 3D Modus anschließend wechselst du dann in den 2D Modus (glOrtho) und Zeichnest eine Fläche mit der Textur über den kompletten Bildschirm.
Hm, ich habe mir das mal angeschaut... Es gab doch mal ein neutrales Template für GL, oder?
Ich habe mir das Template hier geladen: OpenGL 1.2 Template (VCL)
Aber da ist ja die Pyramide und der Text enthalten. Das sieht irgendwie so vollgestopft aus.
Ich habe eine schlankere Variante in erinnerung... Könnt ihr mir sagen, wie ein wirklich nacktes Grundgerüst aussieht, ohne irgendwelchen SchnickSchnack? Also es soll einfach nur ein schwarzes Fenster geöffnet werden.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nimm das 1.5er Template und wirf alles raus, was du net brauchst.
Wenn du bedenken wegen der DGLOpenGL.pas hast. Keine Angst der Header is auf dem Weg der Offizielle JEDI-OpenGL Header zu werden Die Vorzüge findest du hier nochmal: http://wiki.delphigl.com/index.php/DGLOpenGL.pas
Sicherlich prakitsch wäre es, wenn du Vorder und Hintergrund einzeln renderst.
Also zuerst Tiefenpuffer sperren und Hintergrund Zeichnen (Ähnlich z.B. einer Skybox nur mit einer Seite)
Dann Tiefenpuffer entsperren und deine Weltraumobjekte Zeichnen (Planeten, Asteroiden, Raumschiffe).
Dann mittels AlphaTest die Sichtbaren Teile der GUI im 2D Modus über die Szene malen. (Tiefentest kann zut sicherheit ausgeschaltet werden. Muss aber net;) )
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das habe ich nach BuildFont() in der TGLForm.FormCreate(Sender: TObject); Funktion eingebaut.
Allerdings sehe ich immer nur schwarz. Wo baue ich meine Funktionen ein?
Viele Grüße
David
P.S. Ich habe keine Ahnung, ob ich einfach so einen neuen Thread dafür aufmachen sollte...
Also antworte ich einfach auf meinen eigenen....
Das habe ich nach BuildFont() in der TGLForm.FormCreate(Sender: TObject); Funktion eingebaut. Allerdings sehe ich immer nur schwarz. Wo baue ich meine Funktionen ein?
Die richtige Stelle für alles, was gezeichnet werden soll, ist die Prozedur ApplicationEventsIdle. Wie du vielleicht gesehen hast, steht in FormCreate unter BuildFont Application.OnIdle := ApplicationEventsIdle. Das bewirkt, dass immer dann die o.g. Prozedur aufgerufen wird, wenn dein Programm gerade nichts zu tun hat (idle=Leerlauf).
Der Hintergrund dessen ist, dass bei OpenGL alles, was sichtbar sein soll, für jedes Bild neu gezeichnet werden muss (bei flüssiger Darstellung durchaus 100 Bilder pro Sekunde, die alle komplett neu gezeichnet weren). Deswegen stehen alle Zeichenbefehle in der Prozedur, die quasi endlos oft (= bis das Programm beendet wird) aufgerufen wird.
In die Prozedur ApplicationEventsIdle schreibst du deine Zeichenbefehle zwischen die Befehle glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) und ShowText.
Vor den eigentlichen Zeichenbefehlen solltest du noch mittels glTranslatef die Kamera nach hinten verschieben (z.B. um 5 Einheiten: glTranslatef(0.0, 0.0, -5.0), denn sonst sind Kamera und das, was du zeichnest, genau am selben Punkt und du wirst wieder nur einen schwarzen Bildschirm zu Gesicht bekommen.
Schau dir zu diesen Themen doch mal die Einsteiger-Tutorials "Entdeckung einer neuen Welt" und "Eine Welt des Grauens" an, da steht eigentlich alles drin, was du für den Anfang wissen musst.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja stimmt genau. Wobei man jetzt aus ästethischen gründen das zu renderde Zeug net direkt ins OnIdle schreiben muss, sondern sich ne nette Renderprocedur schreibt die von onIdle aufgerufen wird. Im OnIdle kann man dann noch Sachen wie Framecounter einbauen.
@Magellan (in der Hoffnung, dass du das ließt): Das ist jetzt schon der 3. dem der OpenGL Quickstart geholfen hätte. Wann stellst du den den Online? *drängel*
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.