Ich arbeite grad Eure Tutorials durch, bin ein absoluter Neuling auf diesem Gebiet. Und nun habe ich auch schon etwas für Euch: Ich will einfach nur eine simple Pyramide rotieren lassen, aber es klappt nicht. Ich sehe immer nur ein Standbild meiner Szene. FPS werden ständig eingeblendet und aktualisiert, also ist er nicht abgestürzt. Komisch ist auch, dass die Pyramide am Anfang immer anders steht. Mal ist sie im 30° gedreht, mal um 150°, also der Rotationsbefehl funktioniert irgendwie, bloss nicht in Echtzeit, sondern nur einmal am Anfang. Ich benutze Delphi7, die originale OpenGL Bibliothek und die Textures.pas.
begin
glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also als erstes würde ich einmal den Aufruf von LoadTexture aus der Renderschleife entfernen. Dies solltest du machen nachdem OpenGL initialisiert worden ist. Dabei solltest du auch gleich deine Variable x auf 0 setzen. Dies tust du anscheinend nicht, da deine Pyramide am Anfang immer eine andere Rotation hat.
Dies müsste eigentlich schon ausreichen. Denn ich schätze mal, dass sich deine Pyramide bereits dreht. Nur leider durch das LoadTextures so langsam, dass es mit bloßem Auge kaum sehbar ist. Im zweifelsfalle solltest du einmal die Angle erhöhen. Also nicht x := x + 1; sondern x := x + 5; oder so. Allerdings müsste dies nicht notwendig sein, wenn du die vorherigen Änderungen durchführst.
Natürlich solltest du dann auch noch deine Textur binden bevor du die Pyramide zeichnest. Dies wird derzeit schon durch das LoadTextures erledigt. Das machst du so. glBindTexture(GL_TEXTURE_2D, Tex01);
Juhu, da bewegt sich was Habe es mal mit einem einfachen Dreieck aus 3 Points probiert und lasse es nun um die Y-Achse rotieren. Das x habe ich nicht initialisieren müssen, und wenn ich eine Texture später brauche, muss ich noch wissen, wohin ich den LoadTexture Befehl hinschreiben muss. Also in die glDraw() darf es nicht rein? In die WinMain()? Das mit dem glBind hab ich noch nicht verstanden: Muss ich das denn benutzen, wenn LoadTexture das schon bindet? Was für Vorteile bringt es mir, es trotzdem zu benutzen?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich kenne die Struktur von dem Template nicht auswendig. Allerdings bei Texturen oder Modellen gilt generell, dass diese nicht öfters als 1 Mal geladen werden sollen. Wo du dies machst ist erst einmal deine Sache und kann je nach anwendung variieren. Normal genügt es wenn du sie direkt nach der OpenGL Initialisierung lädst. Aber bei einigen Projekten kann es vorkommen, dass diese wärend der Ausführung noch nachgeladen werden müssen. Dann müssen die natürlich in der Renderschleife geladen werden. Aber wenn dann wieder nur 1 Mal.
Das glBind wirst du spätestens dann gebrauchen, wenn du mit mehr als einer Textur arbeitest. Dann musst du OpenGL natürlich sagen können welche der Texturen du jetzt benutzen möchtest. Wenn du nur eine einzelne Textur verwendest kannst du es rein theoretisch weg lassen. Allerdings schadet es nicht auf nummer Sicher zu gehen. Bei 2 Texturen ist es schon wieder ein muss.
Da bin ich wieder! Wollte das jetzt mal so machen mit den Texturen, aber plötzlich sagt er mir "Undefinierter Bezeichner glBindTexture", der Befehl lautet glBindTexture(GL_TEXTURE_2D, Tex01);
Damit ich hier nicht durcheinanderkomme: Dank textures.pas brauche ich kein glGenTextures (findet er übrigens auch nicht) mehr machen oder? Muss ich unbedingt DGLOpenGL.pas benutzen? Ich benutze noch die Standard OpenGL.pas.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wechsel auf die dglOpenGL.pas. Die OpenGL-Unit die mit Delphi ausgeliefert wird ist nicht nur ein Relikt aus der Steinzeit (sprich : Es fehlen fast alle "neuen" Extensions und Funktionen), sie ist darüber hinaus auch noch fehlerhaft (Funktionsnamen sind falsch, wichtige Funktionen fehlen, etc.).
Das mit glBindTexture hab ich hinbekommen, es fehlte die Grunddeklaration...
Aber nun zum DGLOpenGL: Habe in meinen beiden Units in der uses Klausel einfach aus "OpenGL" ein "DGLOpenGL" gemacht. Aber jetzt findet er glTranslate nicht mehr die PAS Datei ist im Lib Verzeichnis von Delphi...
Die Exceptions kommen mit ziemlicher Sicherheit daher, dass du kein InitOpenGL aufgerufen hast! Ach ja, bevor nochwas passiert: nach dem Erstellen deines RenderingContext solltest du noch ReadExtensions aufrufen!
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dann lies dir bitte die Readme zur dglOpenGL durch, dort steht drin warum die Exception kommt. (Manchmal hab ich das Gefühl ich hätte mir die Arbeit mit der Readme echt sparen können)
Hmmmm ich will ja nichts kritisieren, aber viel weiter hilft mir die Readme als absoluter Neuling nicht. Was muss in die Klammern hinter DC und RC und von welchem Typ sind MyDC und MyRC?
Ladt dir mal von der HP unter Files das OpenGL 1.5 template herunter. Wenn du das verwendest, dürften die meisten deiner Start-Probleme erledigt sein. Und ließ die mal die Tutorials zur OpenGL-Initialisierung durch. Danach dürfte auch einiges klarer sein...
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Mitglieder in diesem Forum: 0 Mitglieder und 10 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.