Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie kann ich ausrechnen, wieweit ich meine Kamera nach hinten verschieben muss, um alle Elemente der Szene zu sehen?
Ich dachte dabei an den Strahlensatz aber so richtig weiter komm ich da auch net.
(PS: die Frage is natürlich nur sinnvoll, wenn man ein relativ abgegrenztes Modell (Bei mir Atomstrukturen) komplett sehen will. Mit Außenlevel funktioniert das natürlich net.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
Du brauchst wohl die äußerste linke Grenze deiner Objekte als Koordinate, die äußerste rechte und deinen FOV.
dann kannst du über Tangens(??) oder einfach Pythagoras die entfernung berechnen. Die Abbildung zeigt von oben deine szene, der kreis ist die kamera, das schwarze deine objekte.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Sowas in der Richtung habe ich auch mal gemacht (Terroricde, Schiffdatenbank). Das geht allerdings einfacher : Du veränderst nichts an deiner Position, sondern skalierst dein Modell passend. Wenn du weisst dass in deiner momentanen Ansicht ein Objekt das von x=-1..1 / y=-1..1 reicht genau ins Bild passt, musst du nur die Extremen des anderen Objektes nehmen und dann 1/Extreme skalieren.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das is durchaus auch ne schöne Idee.
Bei eigentlich Lautet meine Idee so (für mein Atommodell Viewer):
Blickvector beibehaten und Translation auf dem Vector feststellen um das Ganze Modell zu erfassen.
Der Betrachter kann bei aufruf von "CalcBestView()" ja auch im Modell stehen. Außerdem kann der User auch mehrmals (DAU) auf den Button drücken und sollte trotzdem sein Modell nicht schrumpfen.
Außerdem ist mein modell ja unregelmäßig. Wenn ich wüsste, dass alle Atome auf einer Ebene liegen wurden, könnte ich auf der Ebene den Vergleichswert berechnen (wie machst du das eigentlich?). Tun sie aber nicht...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hab mir gerade ne schön komplexe Lösung ausgedacht :
1. Man nehme sich eine Beliebige Ebene die senkrecht zur Blickrichtung steht.
2. Man Projeziere alle Punkte auf diese Ebene (Strahlen von Blickpunkt über Punkt ins unendliche. Dort wo strahl ebene schnedet ist Höhen- Seitenwert nehmen(Betrag) bezüglich Blickvector).
3. Sichtfeld auf Ebene Projezieren
4. Per Strahlensatz die minimal nötige Entfernung bestimmen.
Einzigstes Problem: Es muss ausgeschlossen werden, dass Punkte hinter der Kamera liegen. (Ereichbar indem man eine Drehungsmatrix auf die Positionen aller Punkte anwendet, die den Blickvector zur X-Achse rotiert. Alle Punkte die danach im 2 o. 3 Quadranten liegen, liegen hinter der Cam. Man muss dann die Cam erstmal soweit zurückfahren, dass sie auch im 1./4. Quadranten liegen.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Warum denn so kompliziert? Du brauchst doch nur die Extremen auf X- und Y-Achse (evtl. noch mit der aktuellen Rotationsmatrix multipliziert) und schon kannst du errechnen wie du das Modell skalieren musst. Warum willst du denn da die Punkte auf eine Ebene projezieren?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Weil die Extremwerte ansich nix aussagen. Ein 20m hoher Punkt in 100m Entfernung ist noch im Bild wärend ein 3m hoher Punkt in 10cm entfernung schon nicht mehr gesehen wird. Wenn du allerdings beide Punkte auf ne gemeinsame Ebene Projezierst siehst du welcher von beiden wirklichd er extreme ist und aus dem Blickfeld ragt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mi Aug 28, 2002 19:27 Beiträge: 568 Wohnort: Chemnitz / Sachsen
wo is denn das problem an saschas sache??? du hast ja sicherlich sowas wie kameraeinstellungen(also x,y,z-koords), so und bei calcbestview schiebst du deine kamera halt auf die koordinaten die du für dich festlegst (bsp 100,0,0, irgendwas, hauptsache die bedingung von sascha passt). nun führst du noch nen scale-faktor ein und berechnest den. wenn de willst kannste auch ein flag einführen um zu wissen, das de in der "bestview" bist, brauchste aber ne unbedingt.
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.