kagelos Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 Δεν καταλαβαίνω/γνωρίζω τους όρους φ και π'. Ποια είναι η εστιακή απόσταση φακού; Ευχαριστώ πάντως για την υπόδειξη, θα το ψάξω περαιτέρω. Άκυρο, διάβασα τι είναι η εστιακή απόσταση. Είναι η απόσταση του ματιού από το κέντρο του φακού. Πόσο είναι αυτό σε ένα perspective matrix; Μάλλον εδώ το εξηγεί αυτό.
παπι Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 Η αποσταση ειναι το near (συνηθως 1) Η "γωνια" που κανει ο φακος ειναι το field of view (vofy) (π/4 ή π/8) Αλλα αυτα τα οριζεις εσυ, και ειναι "σταθερα". Το μονο που αλλαζεις στο runtime ειναι το eye (position) top (pitch roll) και lookat (target) Τωρα που εκανα και τα πειραμα τα μου, αν θες να αλλαζεις και το fov τοτε scale = ( sqrt ( dot (currentEye - meshPos * transformMatrix) ) / sqrt( dot( firstEye - meshPos * transformMatrix) ) ) * (currentFov / firtFov) πχ camera pos(-10,0,0) fov π/8 mesh pos(0,0,0) scale (0,0,0) camera pos (-20,0,0) fov π/4 mesh pos(0,0,0) scale (0,0,0) camera pos (-20,0,0) fov π/4 4=sqrt( dot(-20,0,0)) / sqrt(dot( -10,0,0)) * ( π / (π/2) ) mesh pos(0,0,0) scale ( 4,4,4)
gtroza Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 εστιακή απόσταση ενός φακού είναι η απόσταση από το "κέντρο" του φακού μέχρι το σημείο που συγκεντρώνονται οι παράλληλες ακτίνες προς τον άξονά του είναι χαρακτηριστικό του φακού πχ 35mm 50mm 75mm 110mm το οπτικό πεδίο είναι άλλο πράγμα δεν μπορώ να βοηθήσω περισσότερο! kalo kouragio δες κι αυτό .
kagelos Δημοσ. 8 Μαρτίου 2012 Μέλος Δημοσ. 8 Μαρτίου 2012 Επειδή τώρα το έπιασα τελικά και βρήκα την λύση, είπα να την ποστάρω και εδώ μήπως χρησιμεύσει και σε κανέναν άλλο στο μέλλον. Έστω ότι θέλουμε ένα αντικείμενο να φαίνεται πως έχει σταθερό μέγεθος ίσο με το 1/4 του viewport μας. Σε κάθε frame θα πρέπει να αλλάζουμε το πραγματικό μέγεθος του αντικειμένου, ανάλογα με την απόστασή του από την κάμερα. Το μέγεθος αυτό υπολογίζεται ως εξής : > const double fov = Math.PI / 4.0; //έστω ότι έχουμε 45 μοίρες FOV float cameraObjectDistance = Vector3.Distance(Camera.Position, Object.Position); float worldSize = (2 * Math.Tan(fov / 2.0)) * cameraObjectDistance; float size = 0.25f * worldSize;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα