Ich bin momentan dabei einen kleinen Geometryloader zu schreiben, der mir verschiedene Objekte (Dreiecke,Polygone,Würfel,etc) mit unterschiedlichen Kantenlängen darstellt. Nun möchte ich jedoch, dass es nach dem Darstellen des Objektes die Möglichkeit gibt dieses so zu skalieren, dass es den gesamten Sichtbereich einnimmt und nicht darüber hinausragt. Sprich, dass alle Objekte die ich lade per Mausklick auf dieselbe Grösse gebracht werden. Ich arbeite mit GLScene und habe das bisher versucht über die FocalLength zu lösen. Bin aber gescheitert. Vielleicht kennt jemand dieses Problem und könnte mir helfen.
Ich wäre sehr dankbar für jede Hilfe.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Sowas habe ich bereits mehrmals gemacht, und an sich ist es sehr einfach zu realisieren. Zuerst ein Objekt mit einer Größe erstellen dass in deinen Viewport passt, bzw. den Viewport so weit anpassen dass dein "Normobjekt" dort hinein passt. Dann beim Laden eines Objektes die Extrempunkte ermitteln (also Minimum und Maximum für X,Y und Z) um damit die Dimensionen der einzelnen Achsen zu bekommen (Dimension X-Achse also Differenz MaxX zu MinX). Jetzt musst du nur noch anhand der längsten Achse das neue Objekt so skalieren dass diese Achsenlänge der des Normobjektes entspricht.
Kleines Beispiel : Normwürfel hat Achsenlänge von 10 für X,Y und Z. Du lädst eine Figur deren größte Achse logischerweise die Y-Achse ist, die jetzt z.B. eine Länge von 25 hat. Also musst du das komplette Objekt um 10/25 skalieren, und zwar auf allen Achsen, damit es in den selben Bildausschnitt passt wie dein Normwürfel.
@Sascha Willems
Dankeschön für die schnelle Antwort. Also würde ich in diesem Falle die Grösse des Objektes ändern welches ich betrachte. Gibt es aber auch die Möglichkeit die Sicht per FocalLength so zu ändern, dass ich mein Objekt immer in derselben Grösse sehe?
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo heavenssake007,
das Problem hat ich auch schonmal.
Bei einem Kamerawinkel von 60 Grad müsste ( Pi mal Daumen ) das 1 bis 1,5-fache der Diagonale der Boundingbox als Kameraabstand vom Objektmittelpunkt ausreichen.
Viele Grüße
dj3hut1
_________________ Wenn Gauß heute lebte, wäre er ein Hacker. Peter Sarnak, Professor an der Princeton University
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.