Registriert: Mi Nov 18, 2009 10:55 Beiträge: 20
Programmiersprache: C++
Hallo. Ich habe, nachdem ich mich in C++ verbessert habe, (mal wieder) versucht mich mit OpenGL zu beschäftigen und stehe vor ein paar Anfängerproblemen... 1. Ich verwende anscheinend eine "veraltete" OpenGL-Version, dies bemerkte ich, als versucht habe mehrere Texturen meines selbstgezeichneten Kubus mittels glMultiTexCoord2f zu erweitern. Ich habe schon allesmögliche versucht wie z.B. die Namen anzupassen (z.B. glMultiTexCoord2fARB), aber es funktiniert dennoch nicht - das Programm will sich nicht kompilieren lassen. Wie kann ich nachsehen, welche OpenGL-Version ich besitze/benutze? Falls es hilft die Daten: opengl32.dll (aus dem Systemordner) Dateiversion: 5.1.2600.2180 Erstellungsdatum: 11. November 2004 (um 13:00)
Die Header (gl.h, GLAUX.H, glext.h, glu.h, glu_.h, glut.h) Letzte Änderungen vom 27. Mai 2005 (12:20) Dem Header entnommenden Kommentaren nach zu urteilen gehören die Header zur (wenn nicht anders angegeben OpenGL-)Version... 4.0 (gl.h) ??? (GLAUX.H) This software was created using the OpenGL(R) version 1.2.1 Sample Implementation (glext.h) This software was created using the OpenGL(R) version 1.2.1 Sample Implementation(glu.h) ??? (glu_.h) GLUT 3.7 (glut.h)
Falls das mit dem Wechseln klappt (hier also irgendjemand die benötigten Datein besitzt und sie mir über legalem Wege zukommen lassen kann), wüsste ich gerne ob ich etwa zu beachten habe nach dem Umstieg. (Ich denke OpenGL 3.0 reicht vollkommen für meine Bedürfnisse, aber ich habe auch nichts gegen neuere Versionen. Dazu noch eine Frage: Die Funktionen von OpenGL sind ja stark von der Hardware beschränkt ... [, sprich: Wenn ich einen alten PC habe (was der Fall ist), kann es mir passieren, das neuere Grafikspielerein nicht funktionieren, weil der PC dafür nicht geeignet ist.], der Umstieg kann jedoch nicht dafür sorgen, dass plötzlich "nichts" mehr läuft, was vorher liegt - korrekt? Soviel dazu.
Dann habe ich noch weitere Fragen/Probleme. Entschuldigt, wenn es so aussieht, als würde ich zu faul sein, um mir die Tutorials bzw. das Wiki durchzulesen, aber ich bin anscheinend etwas schwer von Begriff, was Informatik angeht... 1) Das Zeichnen von Objekten Wie macht man es am besten? Ich habe es jetzt bei meinem Testprogramm (das ich laufend erweitere) schon 2-3 mal gehabt: Mein permanent vorhandener Kubus verliert seine aktuelle Textur (nur weil ich ein neues Objekt zeichne, dass den Bildschirm verdecken sollte), die Textur wird überschrieben oder der Kubus wird plötzlich nicht mehr angezeigt. Ich nehme an, dass ich versehentlich den Blickwinkel verändert habe oder den Kubus außerhalb des Sichtbereiches verschoben habe, was in OpenGL ja das selbe ist, wenn ich richtig informiert bin. Kann mir da vielleicht jemand Tipps geben (z.B. wie man nach seinem Gebrauch am sichersten einen/den Matrixmodus wechselt.) Helfen da vielleicht DisplayLists? (Ich kann mir nicht vorstellen, dass ich für jedes Objekt ständig neue DisplayListen erstellen muss/soll, da diese ja recht langsam sein sollen.)
Ich habe zwar noch weitere Fragen, das Culling betreffend, aber die können erstmal warten, ich muss die Grundlagen erstmal besser beherrschen.
Ich habe übrigens kein Buch, mitdem ich lerne, da mich englische Sachbücher doch etwas abschrecken - aber vielleicht sollte ich mich ja trotzdem am Redbook versuchen...
Registriert: Sa Mär 14, 2009 17:48 Beiträge: 99
Programmiersprache: D, Java, C++
Das "Problem" bei OpenGL ist, dass ein "Header" im eigentlichen Sinne nur bis zu OpenGL 1.2(?) ausreichend ist. Um die Funktionalität späterer Versionen zu laden musst du WGL (Windows) oder GLX (Unixoide Systeme) nutzen, dass klingt vermutlich etwas verwirrend, ist es aber eigentlich garnicht - im Grunde läuft es so: Hole dir mit "wglGetProcAddress" oder dem GLX Pendant "glXGetProcAddress" einen Funktionspointer auf die benötigte Funktion und arbeite von nun an mit diesem Funktionspointer. Da das in der Regel sehr aufwändig werden kann, und dir außerdem noch die Konstanten fehlen wird gerne glew benutzt: http://glew.sourceforge.net/ Glew lädt dir die Funktionspointer der OpenGL Kern Funktionen und außerdem noch die der verfügbaren Extensions, außerdem wird dir die möglichkeit geboten sehr einfach abzufragen ob eine Extension verfügbar ist und so weiter, schaus dir einfach mal an .
Falls das mit dem Wechseln klappt (hier also irgendjemand die benötigten Datein besitzt und sie mir über legalem Wege zukommen lassen kann), wüsste ich gerne ob ich etwa zu beachten habe nach dem Umstieg.
Wichtig ist ein aktueller Grafiktreiber, dieser sollte OpenGL mitliefern.
Zitat:
Wie macht man es am besten?
Versuche nach jedem Objekt immer wieder den Zustand herzustellen den OpenGL vor dem rendern dieses Objektes hatte. Wenn du also beispielsweise eine Textur bindest, dann binde nach dem rendern deines Objektes wieder die Default-Textur mit der ID 0. Wenn du irgendwelche Effekte benutzt, z.B. Licht ein/ausschalten das ebenfalls wieder zurücksetzen. Es macht Sinn immer wieder zu einem Default-Zustand zurückzukehren. Z.B. kann das Licht, Culling oder der Z-Buffer ggf. auch einfach die ganze (oder fast die ganze) Zeit eingeschaltet bleiben.
Zitat:
Ich nehme an, dass ich versehentlich den Blickwinkel verändert habe oder den Kubus außerhalb des Sichtbereiches verschoben habe,
Benutze den Matrixstack um die aktuelle Transformation zu speichern und später wiederherzustellen: Siehe glPushMatrix und glPopMatrix.
Zitat:
Helfen da vielleicht DisplayLists? (Ich kann mir nicht vorstellen, dass ich für jedes Objekt ständig neue DisplayListen erstellen muss/soll, da diese ja recht langsam sein sollen.)
Eine Displayliste zu erstellen/compilieren dauert in der Tat recht lange. Ist diese aber einmal verfügbar geht das rendern ziemlich schnell. Es handelt sich hierbei sogar um ein der schnellsten Rendering-Methoden. Nur VBOs sind besser, weil diese flexibler sind. Aber: Nein, Displaylisten helfen bei diesem Problem nicht wirklich.
Zitat:
Ich habe übrigens kein Buch, mitdem ich lerne, da mich englische Sachbücher doch etwas abschrecken - aber vielleicht sollte ich mich ja trotzdem am Redbook versuchen...
Egal was du später machen willst, gute Kenntnisse der englischen Sprache sind in fast allen Bereichen extrem hilfreich. Am besten lernt man das mit einem Thema das einem Spaß macht...was ist da naheliegender als OpenGL. Nimmt man sich halt ein Wörterbuch (*) und schlägt alles nach was man nicht weiß. Irgendwann muss man nicht mehr nachschlagen... (Filme/Serien auf Englisch gucken ist übrigens auch sehr hilfreich)
(*) dict.leo.org & Co sind natürlich in den meisten Fällen schneller/bequemer als ein Offline-Wörterbuch...
Mitglieder in diesem Forum: Google [Bot], Majestic-12 [Bot] und 9 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.