Thread: Rep:[Algorithms] Quaternions or Matrices
Brought to you by:
vexxed72
From: Vincent P. <vp...@if...> - 2003-02-28 08:29:43
|
There was a thread about this on flipcode just a few days/we= eks ago. http://www.flipcode.com/cgi-bin/msg.cgi?showThread=3D0000741= 7&forum=3D3dtheo ry&id=3D-1 which gives a pointer to=20 http://www.gamedev.net/reference/articles/article1199.asp th= at has an interesting debate about this. Bye, I hope this helps Vincent PRAT site: http://vprat.alrj.org mail: vp...@if... ____________________________________________________________= _________ Envie de discuter en "live" avec vos amis ? T=E9l=E9charger = MSN Messenger http://www.ifrance.com/_reloc/m la 1=E8re messagerie instant= an=E9e de France |
From: Stefan M. <me...@sk...> - 2003-02-28 09:48:41
|
> which gives a pointer to > http://www.gamedev.net/reference/articles/article1199.asp that has an > interesting debate about this. Well, I don't think that helps me to understand why quaternions aren't used more often. IMO the article doesn't take into account the effective number of operations used to do a transformation. Using a 4x4 matrix (containing rotation, scaling and translation) it takes 64 multiplications and 64 add operations to combine two matrices (matrix multiplication). The same can be done with 51 multiplications and 39 add operations using a quaternion and 2 vectors. Yes, there's a overhead because you have to convert the quaternion into a matrix when passing it to OpenGL/DirectX but this takes 17 mult and 15 add operations making it 68 mult and 54 add operations to create a transformation matrix. Now, this doesn't make much benefit, if you only have the world and one object to combine. But it makes a big difference when you do it on a large number of objects. Kind regards, Stefan |
From: Richard F. <alg...@th...> - 2003-02-28 10:21:48
|
four reasons I can think of why we don't use quaternions as matrix replacements: you cannot directly build a quaternion from pos, dir, up neither can you use the rows to show what way something is facing until you convert it to a matrix. quaternions do not require 51 mults and 39 adds... REAL robust quaternion code also takes a sqrt for normalising the S value, which we all know is not good for speed. s values can become degraded if you chain enough quats together at the wrong angles.. you try it, you will find you are getting artifacts at certain rotations... do the math, and find out that it is a REAL limitation of quaternions... and of course there is the fact that you sometimes have to make up new standards like how to store mirroring, scale, shear. (although mirroring can be simply the lowest bit in your s value) > -----Original Message----- > From: gda...@li... > [mailto:gda...@li...] On > Behalf Of Stefan Maton > Sent: 28 February 2003 09:49 > To: gda...@li... > Subject: RE: [Algorithms] Quaternions or Matrices > > > > which gives a pointer to > > http://www.gamedev.net/reference/articles/article1199.asp > that has an > > interesting debate about this. > > Well, I don't think that helps me to understand why quaternions aren't > used more often. > > IMO the article doesn't take into account the effective number of > operations used to do a transformation. > > Using a 4x4 matrix (containing rotation, scaling and translation) > it takes 64 multiplications and 64 add operations to combine two > matrices (matrix multiplication). > > The same can be done with 51 multiplications and 39 add operations > using a quaternion and 2 vectors. > > Yes, there's a overhead because you have to convert the quaternion > into a matrix when passing it to OpenGL/DirectX but this takes 17 > mult and 15 add operations making it 68 mult and 54 add operations > to create a transformation matrix. > > Now, this doesn't make much benefit, if you only have the world and > one object to combine. But it makes a big difference when you do it > on a large number of objects. > > Kind regards, > Stefan > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=6188 > |
From: Tyson J. <twj...@sa...> - 2003-02-28 19:49:00
|
REAL robust Matrices require 3 sqrts to re-orthonormalize. Why can REAL matrices just ignore this step but REAL quaternions have to have it? OTOH, the PS2 (modern example processor) does a 32-bit sqrt in 7 cycles (less than a divide!). It is well worth the time to browse every new processor manual for cycle counts on various operations. Your expensive operation assumptions need to change every rev if you want to stay on top of performance. The ability to quickly see what way something is facing is pretty important for lots of situations, and matrices have a clear edge there. Quaternions are best in situations where you need lots of rotations, no scales, no shears, and limited translations. Sounds like a description of a typical IK / animation problem.... In such cases I prefer to use quaternions. In graphics, the hardware is all matrix optimized so I'm sticking with matrices there. -----Original Message----- From: gda...@li... [mailto:gda...@li...] On Behalf Of Richard Fabian Sent: Friday, February 28, 2003 2:18 AM To: gda...@li... Subject: RE: [Algorithms] Quaternions or Matrices four reasons I can think of why we don't use quaternions as matrix replacements: you cannot directly build a quaternion from pos, dir, up neither can you use the rows to show what way something is facing until you convert it to a matrix. quaternions do not require 51 mults and 39 adds... REAL robust quaternion code also takes a sqrt for normalising the S value, which we all know is not good for speed. s values can become degraded if you chain enough quats together at the wrong angles.. you try it, you will find you are getting artifacts at certain rotations... do the math, and find out that it is a REAL limitation of quaternions... and of course there is the fact that you sometimes have to make up new standards like how to store mirroring, scale, shear. (although mirroring can be simply the lowest bit in your s value) > -----Original Message----- > From: gda...@li... > [mailto:gda...@li...] On > Behalf Of Stefan Maton > Sent: 28 February 2003 09:49 > To: gda...@li... > Subject: RE: [Algorithms] Quaternions or Matrices > > > > which gives a pointer to > > http://www.gamedev.net/reference/articles/article1199.asp > that has an > > interesting debate about this. > > Well, I don't think that helps me to understand why quaternions aren't > used more often. > > IMO the article doesn't take into account the effective number of > operations used to do a transformation. > > Using a 4x4 matrix (containing rotation, scaling and translation) > it takes 64 multiplications and 64 add operations to combine two > matrices (matrix multiplication). > > The same can be done with 51 multiplications and 39 add operations > using a quaternion and 2 vectors. > > Yes, there's a overhead because you have to convert the quaternion > into a matrix when passing it to OpenGL/DirectX but this takes 17 > mult and 15 add operations making it 68 mult and 54 add operations > to create a transformation matrix. > > Now, this doesn't make much benefit, if you only have the world and > one object to combine. But it makes a big difference when you do it > on a large number of objects. > > Kind regards, > Stefan > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=6188 > ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ GDAlgorithms-list mailing list GDA...@li... https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list Archives: http://sourceforge.net/mailarchive/forum.php?forum_id=6188 |
From: Evan B. <eb...@au...> - 2003-03-01 06:44:13
|
2 cents, The biggest benefit I have experienced with quaternions is they simplify orientation blending in game/animation code. But they always have to be "up" converted to a matrix to be used by the rendering scheme, even for animation hierarchies. This instruction counting is basically useless unless it addresses a bottleneck in the pipeline. On the ps2 you may be counting instructions when it is memory access that is killing perfomance. I have never heard of a renderer that used quaternions in place of 4x4 matrices. How could that even be useful. Evan Bell |
From: Jonathan G. <jon...@in...> - 2003-03-01 16:56:00
|
Well, in all of our games we tend to use normalized quaternions for animation (because they're highly compressible) which we eventually convert into matrices to dump into the renderer. Of course though, if you're skinning very large models with very large quantities of bones (say, > 64 and you want them all resident simultaneously, rather than load-as-you-go) there's some theoretical merit in passing quaternions directly into the rendering pipeline (especially on VUs where you control every aspect of what goes on) to simply reduce DMA, and VU1 load/stores which tend to be quite costly if you're otherwise worried about VIF memory bandwidth. This is actually even more true on DirectX 8 hardware where you can't screw with the shader constants in the middle of an active submission, so having a boatload of bones accessible can be quite difficult given the limited nature of the constant array. Using quats directly in the renderer means fewer context switches at the cost of a little more work per vertex. Where the exact trade-off works out I'm not really sure. NVidia actually has a skinning demo doing this somewhere in their sample browser. Don't be so quick to dismiss strange ways of solving problems.. :) Jon ----- Original Message ----- From: "Evan Bell" <eb...@au...> To: <gda...@li...> Sent: Saturday, March 01, 2003 12:46 AM Subject: Re: [Algorithms] Quaternions or Matrices > 2 cents, > > The biggest benefit I have experienced with quaternions is they simplify > orientation blending in game/animation code. > But they always have to be "up" converted to a matrix to be used by the > rendering scheme, even for animation hierarchies. > This instruction counting is basically useless unless it addresses a > bottleneck in the pipeline. On the ps2 you may be counting > instructions when it is memory access that is killing perfomance. I have > never heard of a renderer that used > quaternions in place of 4x4 matrices. How could that even be useful. > > Evan Bell > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=6188 |
From: <nik...@al...> - 2003-03-01 15:24:59
|
Tyson Jensen <twj...@sa...> wrote: > Sounds like a > description of a typical IK / animation problem.... In such cases I > prefer to use quaternions. In graphics, the hardware is all matrix > optimized so I'm sticking with matrices there. Quats are also great for physics computations (typicaly physics ODE resolution, but not only, also constraint dynamics, and IK optimisation as you mentionned). This is why I always store a couple (matrix,quat) for rigid body simulation. I think it make more sense than trying to only optimize matrix manipulations (ODE are so awful expressed in matrix terms). Gabriel |
From: Paul F. <pf...@at...> - 2003-03-03 09:41:47
|
Hi Guys, So I finally came round to the part of Thomas Jakobsen's paper where he says you can embed a tethrahedron inside another object and interpolate the contact points of the real object onto the tetrahedron. I implemented it (in 2d, as always) and it doesn't appear to work at all. Here is my problem: The interpolated response depends on the exact position, size and orientation of the tetrahedron (triangle, in my case) within the object (a square) itself. Eg. if I have the triangle left and above the square and I collide the square on the right bottom corner, the interpolated values will be biased towards the top right triangles points. Obviously this is an extreme example, but it illustrates problem. I'm using barycentrics to get the collision point in terms of the triangle's vertices. I'd like to be proven wrong, so if anyone can point me in the direction of a proof for the correctness of this approach, that'd be great! Cheers, Paul. |
From: Dean C. <de...@ec...> - 2003-02-28 10:46:28
|
But a 4x4 matrix is more general than a rotation, scale and translation. Shears and projective transforms and other 'odd' transforms all fall neatly into the matrix case but not the quaternion case. 4x4 matrices are a superset of the transforms we use on a day to day basis, its handy to have that flexibility for when you need it. I once inherited an engine that use quats and 2 vectors to pass things into the renderer and the first thing we had to we replace it with 4x4 matrices, the reason being our animation system sometimes used shears and we wanted to use projection for simple shadows. Your not comparing like for like when comparing quats and 4x4 matrices, 4x4 matrices are very powerful objects. Unit quats are just rotations, that can be a good thing higher up but at the lowest level matrices are more general. Bye, Deano Dean Calver, Eclipse Studios. ----- Original Message ----- From: "Stefan Maton" <me...@sk...> To: <gda...@li...> Sent: Friday, February 28, 2003 9:48 AM Subject: RE: [Algorithms] Quaternions or Matrices > > which gives a pointer to > > http://www.gamedev.net/reference/articles/article1199.asp that has an > > interesting debate about this. > > Well, I don't think that helps me to understand why quaternions aren't > used more often. > > IMO the article doesn't take into account the effective number of > operations used to do a transformation. > > Using a 4x4 matrix (containing rotation, scaling and translation) > it takes 64 multiplications and 64 add operations to combine two > matrices (matrix multiplication). > > The same can be done with 51 multiplications and 39 add operations > using a quaternion and 2 vectors. > > Yes, there's a overhead because you have to convert the quaternion > into a matrix when passing it to OpenGL/DirectX but this takes 17 > mult and 15 add operations making it 68 mult and 54 add operations > to create a transformation matrix. > > Now, this doesn't make much benefit, if you only have the world and > one object to combine. But it makes a big difference when you do it > on a large number of objects. > > Kind regards, > Stefan > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=6188 > > |
From: Stefan M. <me...@sk...> - 2003-02-28 11:50:10
|
@All... I get your points. I think I have to rethink my quaternion based structure. Thanks, Stefan |
From: Joakim H. <di...@ho...> - 2003-02-28 12:05:35
|
Dont shy away from it though, its nice for interpolation, animations etc. ----- Original Message ----- From: "Stefan Maton" <me...@sk...> To: <gda...@li...> Sent: Friday, February 28, 2003 12:50 PM Subject: RE: [Algorithms] Quaternions or Matrices > @All... I get your points. > > I think I have to rethink my quaternion based structure. > > Thanks, > Stefan > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=6188 > |