Ich wollte euch mal fragen, ob bzw. wie es möglich ist, ein 360-Blickfeld zu rendern. Ziel ist für mich hierbei das Rendern der kompletten 3D-Umgebung in einem Renderpass in eine Textur, um an die Tiefenpufferwerte zu kommen.
Hab schon folgendes probiert:
Code:
gluPerspective(360,1,1,1024);
Das funktioniert aber nicht, ich sehe in der gerenderten Textur immer nur eine Farbe.
Jemand ne Idee?
Sollten Infos fehlen, kann ich die gerne nachtragen :)
Bei einem Blickfeld ab 180° kann die Perspektive nicht mehr linear sein, also nich mit Matrizen zu beschreiben - mit gluPerspective keine Chance. Mehrere Passes sind absolut tabu?
Als kleine Erklärung schau mal hier vorbei:
http://en.wikipedia.org/wiki/Fisheye_lens Dort sind Geraden keine Geraden mehr, sondern werden durchgebogen - Anderes will mathematisch nicht Und der Rasterizer der GPU will Polygonen gerade kanten geben
Okay, verstehe. Geniale Sache. Dann bleibt mir wohl nichts weiter übrig, als mehrere Renderpasses einzuführen. Ich wollte die gerenderte Textur evtl. zur Kollisionskontrolle benutzen, dementsprechend wäre das 360°-Blickfeld ideal gewesen. Wenn ich jetzt 2 mal jeweils ein Blickfeld von 180° rendere, wäre das auch okay.
Blöderweise funktioniert das nicht ;) - zumindest bei mir.
Wenn ich mit gluPerspective den Winkel auf 180 Grad einstelle, sehe ich gar nichts mehr. 179° zeigt nicht das an, was erwünscht ist - da kann ich leider trotzdem nicht erkennen, was passiert.
Edit: Heißt das jetzt, dass ich 3 Renderpasses machen müsste?
Wenn du es exakt willst ja. Wenn allerdings deine Polygone klein sind auf dem Bildschirm, kannst du auch die 360° auf den niedrigeren Öffnungswinkel runtertransformieren mittels Vertexshader. Allerdings sind dann die Kanten gerade, was sie nicht sein dürften. Je kleiner die Polys desto geringer der Effekt.
Allerdings graut es mir bei dem Gedankten die grafische Darstellung zur Kollision zu verwenden.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
2 Tolle FBO's nehmen und 0-180° für das erste und 180-360 für das 2. FBO.
Dann sollte das kein problem mehr geben.
Es empfiehlt sich MipMaps abzuschalten.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
2 Tolle FBO's nehmen und 0-180° für das erste und 180-360 für das 2. FBO. Dann sollte das kein problem mehr geben.
Das funktioniert komischerweise nicht. Geht der Öffnungswinkel gegen 180°, so sehe ich nichts mehr.
Ich probier mal ein bisschen mit den 3 Renderpasses rum!
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,
Werte >= 180° für den field-of-view machen keinen Sinn, da gluPerspective im Grunde genommen auf glFrustum aufbaut.
Bei 180° liegen die zNear und die zFar-Ebene übereinander ( und gehen durch den Blickpunkt ), man bekommt also nix zu sehen.
Ich würde dir lieber empfehlen dreimal mit 120° field-of-view zu arbeiten.
120° sollte noch problemlos gehen. Erst bei Annäherung an 180° wird es kritisch. Vorher nimmt die Verzerrung natürlich immer weiter zu, da der Monitor wohl bei kaum einem Benutzer 120° einnimmt.
Wofür brauchst du denn deine 360° Ansicht denn alles?
Es geht praktisch nur um eine Kollisionskontrolle.
Ich hab keine Lust die Routinen zu schreiben, um die "Rückrechnung" vorzunehmen. Also den Vektor zu berechnen, um den meine Spielerbox wieder zurückbewegt werden muss, um gerade wieder außerhalb des Gegenstandes zu sein. Außerdem benutze ich auch glScale, um meine Models zu vergrößern. Das müsste ich auch noch berücksichtigen.
Deshalb wollte ich mal gucken, ob nicht vielleicht die Kollisionskontrolle mithilfe des Tiefen-Puffers realisiert werden kann. Dafür wollte ich die gesamte Umgebung in eine Textur (oder in ein Array) mappen und dann je nach Z-Wert den Rückrechnungsvektor berechnen.
Achja:
Zitat:
Sind es nicht mindestens 4? Ich will mir das gar nicht vorstellen, aber 6 mal 90° ist in jedem Fall richtig Wink
Ist der Öffnungswinkel der vertikale und der horizonale Öffnungswinkel? Dann bräuchte man ja 4 Renderpasses, sofern ich mich jetzt nicht vertue.
Hmm...wenn ich mich nicht irre, reicht es bei Kollisionskontrolle doch eigentlich aus, die Tiefenwerte nur in Bewegungsrichtung zu bestimmen, oder?
Also ich habs jetzt so realisiert, dass ich zwei Renderpasses mache. Einmal den Boden, damit man Fallen einfach simulieren kann und einmal genau die Laufrichtung - gute Idee :) Funktioniert einigermaßen ;)
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.