|Re: [eigen] Rigid transformations in eigen: use of dual quaternions|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Rigid transformations in eigen: use of dual quaternions
- From: Rohit Garg <rpg.314@xxxxxxxxx>
- Date: Sat, 12 Sep 2009 20:16:09 +0530
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=UkLv5xTfmjfHzn+CKAEM3TTTn4b8xlQA3uY3xk2bz4U=; b=PlcZylIyfkSdGZyJsc/we90vTdq6Gfnt5a6ixzuzJu3F+vP2ubVpFBgS2nmesTzJgq xV+FdhXF+/6HmXhqYselCcl0A20WoPEvj1+MWsk6JI1yewEv64xOv5T0tzolbQTWxdMz qRMBHclE+eKQ70xfNCahXeW+u1pTKrzCBDeAk=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=OjBbqY137G+aNl5khQnyqK0SssH93OLC0fa+nBecelJqglmMMDv1QifH9lp0KrprZL 1Uq7C7FcH1lmVmEknERuuAn7C4V8may6szX1cHnOG/9Oe4H0U/5V27XnNcpheoxFND3t MbXAPb/VxqyOrqdkIwSPJE0ZDvXvRGZsuP1aA=
> For a N-dimensional transformation, in Affine and Projective modes,
> it's internally represented as a (N+1)*(N+1) matrix.
> In AffineCompact mode it's a N*(N+1) matrix.
> The top-left N*N block is the linear part, the last column contains
> the translation part. Exactly like with OpenGL.
>> b) I am right now rolling my own dual quaternion class, but if eigen
>> provides dual quaternions (say as RigidTransform class, to exclude
>> scaling) then it would be very useful indeed.
>> c) Dual quaternions have many advantages, in that they allow artifact
>> free skining, rigid transform interpolation, are resistant to
>> numerical defects (just like quaternions). Was their use considered
>> and discarded?
> Sorry, I have no clue what dual quaternions are. I don't remember them
> being considered. Can you detail what they are and how they are better
> than existing Eigen classes for real use cases? What is skining? What
> does "rigid" mean here?
For what-are-dual-quaternions, look at the paper here
If you understand quaternions, you'll understand dual qaternions too.
Considering that you are a math grad student, you'll understand the
paper more than I did. :)
Rigid transformation is transformation that preserves a rigid body (ie
distance and angle preserving). Translation, rotations, reflections
do. Scaling and shearing don't.
Suppose you have a geometric object in posA and you know it's final
position posB. With matrices, you'd have to interpolate between
matrices ( a bad idea). With dual quaternions, you can do something
like slerp for normal quaternions. So they help in animation where you
want to specify only the initial and final transform matrices and let
math work out the in between stuff.
Skinning is a technique to perform rigid transformation for meshes, as
in games, used to move arms/legs etc.
All in all, dual quaternions are to rigid transformations what
quaternions are to 3D rotations. The biggest advantage is to treat
rotation and translation in a unified framework.
>> d) The recently introduced EIGEN_TRANSFORM_PLUGIN, what does it do?
> It allows one to add stuff into the Transform class from the outside.
> Just like the EIGEN_MATRIXBASE_PLUGIN described here,
>> e) Interpolation is the key thing here. We need it and we are having
>> to do it ourselves. But we'd like to have the code rolled into eigen,
>> so that it plays nice with the rest of the geometry api and allows
>> convenient extraction of matrices (to upload as uniforms to shaders).
> Great, thanks for caring.
> For interpolation, all I can see in current Eigen is
> Quaternion::slerp(). Can you also explain how what you want to do is
> different from that?
Quaternion::slerp() doent do rigid transformation interpolation.
Department of Physics
Indian Institute of Technology