Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Mit den Daten, die du hochgeladen hast kann ich nicht viel anfangen, da weder der Quellcode noch eine ausführbare Datei im Archiv enthalten ist.
Ohne das Programm gesehen zu haben würde ich darauf tippen, dass deine Clippingplanes unglücklich gesetzt sind.
Verringere einfach die Entfernung der Nearclippingplane, die du vermutlich mit gluPerspective setzt.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Dein Problem ist ein ganz normales Resultat des aktivierten Tiefentests. Dein Würfel wird immer an den Stellen weg geschnitten, an dem die einzelnen Fragmente den Tiefentest nicht bestehen. Das ist ganz logisch, denn immer wenn ein Stück des Würfels weg geschnitten wird liegt eine Wand deines Raumes näher am Betrachter als der Rest des Würfels.
Entweder du renderst auch den Würfel mit deaktiviertem Tiefentest (wobei du hier die einzelnen Seiten der Entfernung zum Betrachter nach sortieren müsstest) oder aber du passt die Werte der Translation und Skalierung so an, dass der Würfel in keinem Fall eine Wand berührt.
Ich habe die Werte wie folgt angepasst:
glTranslatef(lire/50,move/50,-0.1); //wir bewegen alles etwas nach oben oder unten
glScale(scale/50,scale/50, 1/50); //Nun skalieren wir die Szene
Dann noch die Nearclippingplane im OnResize-Ereignis deines Formulars näher herangeholt und dein Problem sollte verschwinden:
gluPerspective(45.0, Width/Height, 0.01, 100.0);
Jedoch ist diese Lösung keine schöne Lösung des Problems, denn sobald du die Größe des Würfels oder des Raumes bzw. die Bewegung des Würfels veränderst musst du erneut passende Werte finden, soweit es dann überhaupt noch welche gibt.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Genau. Das habe ich auch festgestellt, nachdem ich erst einmal unterbinden musste, dass sich das Programme nach dem Starten sofort wieder beendet.
Allerdings gibt es noch andere Lösungen dafür.
Du könntest a)
nach dem Zeichnen deines Raumes den Tiefenbuffer löschen. glClear(GL_DEPTH_BUFFER_BIT);
b)
wärend des zeichnens deines Raumes das schreiben des Tiefenbuffers verhindern. Was wohl das sinnvollste ist. Dann könntest du dir zu dem Zeitpunkt auch den Tiefentest sparen. Würde ja eh immer erfüllt werden.
glDepthMask(GL_FALSE); verhindert das schreiben
glDepthMask(GL_TRUE); aktiviert es wieder.
c)
die Dimensionen deines Raumes und deines Würfels aneinander anpassen. Dann würde er ganz ohne Tricksen nicht mehr aus dem Raum raus kommen.
Die schnellsten und einfachsten wären a und b. Allerdings denke ich mal, dass c am Besten aussehen dürfte. Veilleicht würde es mit ein wenig mehr Tiefe (FOV) dann sogar noch besser aussehen.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.