Stel ik heb twee transformatie nodes die een quaternion (m_r) voor orientatie en een vector (m_t) voor translatie/positie bevatten. De transformatie van punt p is dan: im(m_r * p * conj(m_r)) + m_t, of als we quaternion/vector vemenigvuldiging definieren: m_r*p + m_t
Nu voeg ik twee zulke transformaties samen:
So far so good. Gewoon uitschrijven en dan de delen invullen zoals in de 3 regels commentaar.
Ik wil nu nog een schaal factor toevoegen. Je krijgt dan met een schaal vector m_s voor de xform: m_r*(m_s*p) + m_t, dus schalen, roteren, transleren.
Vraag: kan je met schaal op een zelfde manier twee transformaties samenvoegen?
Ik kom hierop: // R2*s2*(R1*s1*p + t1) + t2 = R2*s2*R1*s1*p + R2*s2*t1 + t2, maar weet niet hoe ik dat in de juiste delen (schaal, rotatie, translatie) op moet splitsen. Kan het ook nergens vinden online. Doet niemand dat? (sidenote: als ik alles naar matrices omzet en vermenigvuldig is het triviaal natuurlijk, maar kan het rechtstreeks zoals boven?)
Tweede vraag uit nieuwgierigheid: ik heb ook dual quaternions geimplementeerd, die encapsuleren rotatie/translatie; wordt dat door mensen gebruikt in graphics pipelines zoals mijn eerste voorbeeld boven? Of eigenlijk alleen voor skinning en quaternion blending? Ik zie namelijk als blending niet nodig is niet echt voordeel over een quaternion/translatie paar. Sterker nog, dat is 7 floats ipv 8 en normaliseert makkelijker.
Nu voeg ik twee zulke transformaties samen:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| // n2 after n1, as in (n2 o n1)(x) template <typename T> TransformationNode<T> operator*(const TransformationNode<T>& n2, const TransformationNode<T>& n1) { // R2*(R1*p + t1) + t2 // = R2*R1*p + R2*t1 + t2 // = (R2*R1)*p + (R2*t1 + t2) return TransformationNode<T>( n2.getRotation() * n1.getRotation(), transformVector(n2.getRotation(), n1.getTranslation()) + n2.getTranslation() ); } |
So far so good. Gewoon uitschrijven en dan de delen invullen zoals in de 3 regels commentaar.
Ik wil nu nog een schaal factor toevoegen. Je krijgt dan met een schaal vector m_s voor de xform: m_r*(m_s*p) + m_t, dus schalen, roteren, transleren.
Vraag: kan je met schaal op een zelfde manier twee transformaties samenvoegen?
Ik kom hierop: // R2*s2*(R1*s1*p + t1) + t2 = R2*s2*R1*s1*p + R2*s2*t1 + t2, maar weet niet hoe ik dat in de juiste delen (schaal, rotatie, translatie) op moet splitsen. Kan het ook nergens vinden online. Doet niemand dat? (sidenote: als ik alles naar matrices omzet en vermenigvuldig is het triviaal natuurlijk, maar kan het rechtstreeks zoals boven?)
Tweede vraag uit nieuwgierigheid: ik heb ook dual quaternions geimplementeerd, die encapsuleren rotatie/translatie; wordt dat door mensen gebruikt in graphics pipelines zoals mijn eerste voorbeeld boven? Of eigenlijk alleen voor skinning en quaternion blending? Ik zie namelijk als blending niet nodig is niet echt voordeel over een quaternion/translatie paar. Sterker nog, dat is 7 floats ipv 8 en normaliseert makkelijker.