godlike Δημοσ. 24 Αυγούστου 2007 Δημοσ. 24 Αυγούστου 2007 Το πρόβλημα είναι ως εξής. Έχω 3 σημεία στον χώρο H, T και Α των οποίων γνωρίζω τις συντεταγμένες. Τα Τ, Η και Α γίνονται translate ή και rotate ή και scale στον χώρο και οι νέες συντεταγμένες των Τ και Η είναι Τ' και Η' τις οποίες και γνωρίζω δηλ. Το πρόβλημα είναι να βρω το Α'. Θέλω να βρω τον 4x4 transformation matrix ο οποίος όταν θα τον πολλαπλασιάζω με τις συντεταγμένες του Α θα μου δίνει τις συντεταγμένες του Α' Ευχαριστώ εκ των προτέρων και ελπίζω να έγινα κατανοητός. ΥΓ: Είναι το αντίθετο από αυτό στο οποίο γνωρίζω τους rotation matrices (δηλ γωνίες), τον translation matrix και τον scale matrix και ψάχνω τα Τ', Η'.
kickeras Δημοσ. 24 Αυγούστου 2007 Δημοσ. 24 Αυγούστου 2007 Αν κατάλαβα καλά έχεις Vector A (x,y,z) τo οποίo γνωρίζεις. Επιπλέον γνωρίζεις το Vector translation(t_x, t_y, t_z), το rotation (π.x. π/2 στον x axis), και το Vector scale(s_x, s_y, s_z) - βάζω 3 συντεταγμένες ώστε να υπολογίζεις και non-uniform scales. Εκτός από αυτά έχεις και τον Vector A(x,y,z). Αν δουλεύεις σε OpenGL (φαντάζομαι για graphics τα θες) χρησιμοποιείς column vector order ενώ αν δουλεύεις σε DirectX χρησιμοποιείς row vector order. Δεν έχει και τόσο σημασία βέβαια καθώς με ένα transpose στρώνεις. π.χ. σε OpenGL identity matrix = [1, 0, 0, 0] [0, 1, 0, 0] [0, 0, 1, 0] [0, 0, 0, 1] original matrix A = [1, 0, 0, x] [0, 1, 0, y] [0, 0, 1, z] [0, 0, 0, 1] translation matrix A' = [1, 0, 0, t_x] [0, 1, 0, t_y] [0, 0, 1, t_z] [0, 0, 0, 1 ] rotation matrix A' x-axis by a degrees = [1, 0, 0, 0] [0, cosa, -sina, 0] [0, sina, cosa, 0] [0, 0, 0, 1] rotation matrix A' y-axis by a degrees = [cosa, 0, sina, 0] [0, 1, 0, 0] [-sina, 0, cosa, 0] [0, 0, 0, 1] rotation matrix A' z-axis by a degrees = [cosa, -sina, 0, 0] [sina, cosa, 0, 0] [0, 0, 1, 0] [0, 0, 0, 1] Αν τώρα θες να κάνεις rotation by arbitrary axis χρησιμοποιείς άλλους πίνακες. scale matrix A' = [s_x, 0, 0, 0] [0, s_y, 0, 0] [0, 0, s_z, 0] [0, 0, 0, 1] ο τελικός σου matrix Α_transformed βγαίνει από το πολλαπλασιασμό scale A' * rotation A' * translation A'.
takeda Δημοσ. 24 Αυγούστου 2007 Δημοσ. 24 Αυγούστου 2007 όπως τα λέει ο kickeras, νομίζω δεν σου χρειάζονται καν δυο σημεία (πως μετασχηματίζονται) μόνο ένα. στο σχήμα σου πχ που στρίβεις το Η και το Τ κατά θ έχεις Τ'=R(θ) T όπου Τ'=(χ',y') και Τ=(χ,y) > R(θ)= | cosθ sinθ | | -sinθ cosθ | από το σύστημα βρίσκεις το θ και απο εκεί το Α' τα ίδια ανάλογα με τον μετασχηματισμό
godlike Δημοσ. 24 Αυγούστου 2007 Μέλος Δημοσ. 24 Αυγούστου 2007 Χεχε όντος για γραφικά είναι το πρόβλημα. Μιας και ξέρεις να το θέσω όσο πιο απλά γίνεται χωρίς τις μαθηματικές μανούρες. Έχω ένα bone και το vector H είναι το head του kai to Τ είναι η tail του. Το Α είναι ένα vertex που κουνιέται με βάση αυτό το bone. Στο επόμενο καρέ το bone πάει στα H`και Τʼ. Το Α που πάει;
kickeras Δημοσ. 24 Αυγούστου 2007 Δημοσ. 24 Αυγούστου 2007 Φαντάζομαι ότι το object bone που έχεις αποτελείται από ένα σύνολο από vertices(Τ,Η,Α,etc.). Ε πολλαπλασιάζεις το Α με τον ίδιο transformation matrix που πολλαπλασιάζεις το Τ, το Η και γενικά όλα τα verts του object bone. Προσοχή μιας και δουλέυεις με bones γιατί παίζεις με skinned meshes και τα transformations γίνονται σε συνδυασμό με την ολική κίνηση του σκελετού.
godlike Δημοσ. 24 Αυγούστου 2007 Μέλος Δημοσ. 24 Αυγούστου 2007 Φαντάζομαι ότι το object bone που έχεις αποτελείται από ένα σύνολο από vertices(Τ,Η,Α,etc.). Ε πολλαπλασιάζεις το Α με τον ίδιο transformation matrix που πολλαπλασιάζεις το Τ, το Η και γενικά όλα τα verts του object bone. Προσοχή μιας και δουλέυεις με bones γιατί παίζεις με skinned meshes και τα transformations γίνονται σε συνδυασμό με την ολική κίνηση του σκελετού. Το πρόβλημα είναι ότι δεν ξέρω ποιος είναι ο matrix που κίνησε το bone για να τον χρησιμοποιήσω και πολλαπλασιάσω το Α (και τα όμοιά του). Αυτόν ψάχνω. ισχύει: matrix * T = T´ Εγώ ξέρω Τ και Τ΄και ψάχνω τον matrix
kickeras Δημοσ. 24 Αυγούστου 2007 Δημοσ. 24 Αυγούστου 2007 Δε ξέρεις το κατά πόσο γίνεται translate, rotate ή scale to T? Αλλιώς δε γίνεται να υπολογίσεις αυτό που λες. Βέβαια μπορείς να το πάρεις μόνο με translation στο χώρο το οποίο φυσικά δεν είναι σωστο.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.