ich will meine Objekte entsprechend zur "Kamera" sortieren. Dazu bräuchte ich eine Funktion welche mir die entfernung 2er Vektoren voneinander berechnet?! Hat da jemand was auf lager?
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Du hast deine beiden Vektoren v1 und v2. Dann rechnest du v1 - v2 (also v1.x - v2.x, v1.y - v2.y und v1.z - v2.z). Von dem resultierendem Vektor brechnest du die Länge, die ist der Abstand den du haben willst. Die Länge (l) eines Vektors berechnet man so:
l = sqrt(x*x + y*y + z*z);
Wenn du nur testen willst, ob eine Länge größer ist als eine andere, kannst du dir die teure Wurzelberechnung auch sparen und die Längen zum Quadrat miteinander vergleichen.
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:23, insgesamt 1-mal geändert.
was ich gefunden habe ist das hier sqrt((x1-x2)² + (y1-y2)² + (z1-z2)²) doch ich denke das wird nicht allzu performant sein oder?
Wie gesagt, wenn du nur die Distanzen vergleichen willst, nicht aber den exakten Wert der Distanz benötigst kannst du die Wurzel weglassen. Die Wurzel ist eigentlich das einzig aufwendige an dieser Operation, alles andere kannst du vernachlässigen.
Code:
function Distance(v1, v2: TVektor3f): Single; var x,y,z: Single; begin x := v1.x - v2.x; y := v1.y - v2.y; z := v1.z - v2.z; result := sqrt(x*x + y*y + z*z); end;
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
wenn er das ganze aber relativ zur Kamera machen will, dann geht das nicht so. Dann müsste man erst den Vektor der Blickrichtung berechnen und dann relativ dazu die Entfernung der Positionen.
Also ich hab das jetzt so verstanden das er die Distanz zwischen Kamera und Objekt wissen will und eben danach sortieren. Sofern die Position von Kamera und Objekt bekannt ist, ist das mit der obigen Funktion kein Problem.
so ganz unrecht hat der Bergmann nicht. Ich hab gedacht, das das ermitteln der Kamera Position einfach ist.. doch da hab ich mich getäuscht.. Also ich mache folgendes..
somit hab ichs wie z.B. bei C4D oder 3dm. So nun dachte ich mir das die "Kamera", welche ja keine ist auf Position -xMov, yMov, -zMov ist.. Dem ist aber nicht so.. denn ich hab die Rotation vergessen... wie komm ich denn nun am einfachsten an die Position?!
Das sollte eigentlich funktionieren. Hast du die Rotation etwa im Matrix-Modus GL_PROJECTION gesetzt? Die Kamera-Transformation gehört in GL_MODELVIEW, nur die eigentliche Projektion (z.B. über gluPerspective) gehört in GL_PROJECTION. Es gibt natürlich Umstände bei denen man alles in die Projektionsmatrix packen muss (*), aber die sind hier mit hoher Wahrscheinlichkeit nicht gegeben. In jedem Fall musst du mit Problemen wie beispielsweise mit falsch transformierten Normalen rechnen, wenn GL_PROJECTION Rotationen oder Translationen (Verschiebung) enthält.
(*) z.B. bei meiner Diplomarbeit projiziere ich 3D-Geometrie in ein Foto hinein wobei die Projektionsmatrix vorgegeben ist und bereits sämtliche Transformationen enthält.
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.