Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Δεν καταλαβαίνω/γνωρίζω τους όρους φ και π'. Ποια είναι η εστιακή απόσταση φακού;

Ευχαριστώ πάντως για την υπόδειξη, θα το ψάξω περαιτέρω.

 

Άκυρο, διάβασα τι είναι η εστιακή απόσταση. Είναι η απόσταση του ματιού από το κέντρο του φακού. Πόσο είναι αυτό σε ένα perspective matrix; Μάλλον εδώ το εξηγεί αυτό.

Δημοσ.

Η αποσταση ειναι το 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)

post-216584-0-70868800-1328531631_thumb.png

 

 

 

camera pos (-20,0,0) fov π/4

mesh pos(0,0,0) scale (0,0,0)

post-216584-0-87859300-1328531682_thumb.png

 

 

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)

post-216584-0-02254100-1328531876_thumb.png

Δημοσ.

εστιακή απόσταση ενός φακού είναι

η απόσταση από το "κέντρο" του φακού μέχρι

το σημείο που συγκεντρώνονται οι παράλληλες ακτίνες

προς τον άξονά του

είναι χαρακτηριστικό του φακού

πχ 35mm 50mm 75mm 110mm

το οπτικό πεδίο είναι άλλο πράγμα

 

δεν μπορώ να βοηθήσω περισσότερο! :mrgreen:

 

kalo kouragio

δες κι αυτό

 

.

  • 1 μήνα μετά...
Δημοσ.

Επειδή τώρα το έπιασα τελικά και βρήκα την λύση, είπα να την ποστάρω και εδώ μήπως χρησιμεύσει και σε κανέναν άλλο στο μέλλον.

 

Έστω ότι θέλουμε ένα αντικείμενο να φαίνεται πως έχει σταθερό μέγεθος ίσο με το 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;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...