Hmmm... what form are you using your Eulers in? If it's radians, it's not
too bad - just a quick sin/cos table lookup. And you only need to do it once
per object if it's a simple rigid body.

The trick with making matrices numerically stable is that you don't ever
want to do a stepwise transform on an object - you regenerate the matrix
from scratch each time. (This is one of those things you never really see in
practice; most engines split out the rotational transforms and keep them
separate, using either an axis-angle representation, quaternions, or in some
bad cases, euler angles [this is what Unreal uses btw]. That way, you keep
fidelity - or at the very least, you don't care too much about inaccuracies
as they come in - you can just ignore them if your object is rotated a
little off; it's not a culumlative error).

Assuming no scaling or shear, just rotation and translation, your
translation is the rightmost column of numbers in the matrix. If all of your
objects are pre-scaled in memory to the right size, all you have to do is
apply the rotation and translation in order to each of the points.
Screen-space projection is a little more difficult, but that one you can
precalc all the divides in.

On machines without SIMD or dedicated 3D instructions (such as the SAM),
it's nearly always best to break out the matrix into individual linear
equations, take the common pieces and only calculate them once, and then
operate on them that way. 

--
Simon Cooke
Director of Engineering / Business Developer, X-RAY KID STUDIOS -
www.x-raykid.com 
Founder, Popcorn Films - www.popcornfilms.com  
Cell: 206 250 7892 XBOX Live GamerTag: Spec Tec

-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of Thomas Harte
Sent: Wednesday, August 05, 2009 5:14 AM
To: [email protected]
Subject: Re: Hi - just checking

That's not entirely true. Matrices are numerically unstable, so the
cost of ensuring they remain orthonormal when applying consecutive
local transforms in a game such as Elite is substantially greater than
the cost of ensuring that a quaternion remains of unit length.

I make it 8 multiplies, 3 adds, 1 square root and 1 divide to fix up
numerical error in a quaternion. Conversely, I get 36 multiplies, 21
adds, 3 square roots and 3 divides to fix up an orthonormal matrix.

Quaternion to matrix is 10 multiplies, 6 shifts and 14 adds. So the
way I calculate it, you can fix a quaternion and convert it into a
matrix in less than you can fix up a matrix. Furthermore, quaternion
composition is 16 multiplies and 12 adds, whereas matrix composition
(with assumptions about the bottom row of a 4x4) is, ummm, at least 36
multiplies and 18 adds. And that's with the translation component not
completely factored in (I'm reading actual code off screen and have
optimised the translation out of this particular batch).

Elite is also a perfect example of when Euler's aren't fine, even if
they didn't produce Gimbal lock, as all rotation is around local axes.
And besides that, Euler angles always have to be converted to some
other form before they can be applied to arbitrary geometry. Matrices
require no further transforms.

On Wed, Aug 5, 2009 at 2:12 AM, Simon Cooke<[email protected]> wrote:
> You only really need quaternions if you're doing animation or
interpolation.
> If you can live with the gimble lock, euler's fine.
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On
> Behalf Of Thomas Harte
> Sent: Tuesday, August 04, 2009 10:05 AM
> To: [email protected]
> Subject: Re: Hi - just checking
>
> Am I replying to the correct thread? I don't know. But I've had the
> opposite experience to a bunch of people here, having become
> substantially more busy in my work than I was even just a few months
> ago, squeezing the SAM temporarily out.
>
> A version of my vector 3d-stuff-as-a-library-for-others was all but
> finished several months ago, I'll endeavour to get that out, though it
> still has the awkward limitation of doing rotations with Euler angles
> only - which may be less efficient and is certainly more limiting than
> special orthogonals or quaternions.
>
> I'm still thinking about smart ways to optimise the reverse face
> stuff. I need to get something hierarchical or otherwise group-related
> in there; checking every single face is obviously not the optimal way
> to proceed. I guess what I'm looking for is some sort of bin-type
> mapping to the surface of the unit sphere that allows all the points
> on a particular hemisphere to be isolated from the majority of the
> points on the opposite hemisphere. Or, you know, something at least a
> lot like a sphere. Though I'm not sure any sort of lookup into
> something a lot like a sphere would help much as it'd need to be
> indexed by a three-tuple.
>
> I guess a good broad sweep would be to mark each face according to the
> visibility of the faces of a bounding box - if a face on the real
> model points away from the face on the bounding box then it definitely
> can't be visible if the box face is. Or something like that.
>
> I'm going to stop thinking aloud now...
>
> On Tue, Aug 4, 2009 at 10:22 AM, Steve Parry-Thomas<[email protected]>
> wrote:
>> I guess when the clocks go back in October SAM users will hibernate over
> the
>> winter until next August!
>>
>>
>>
>>
>>
>>
>>
>> From: [email protected] [mailto:[email protected]] On
>> Behalf Of Ian Spencer
>> Sent: 04 August 2009 08:04
>>
>> To: [email protected]
>> Subject: Re: Hi - just checking
>>
>>
>>
>> Wow, I just sent the checking mail to see whether something was wrong
with
>> my subscription to the group and it seems it was like poking a stick into
> a
>> hornets nest (in a positive sort of way) - over 40 mails in the last few
>> days on the group. It's just great to see everyone is alive and kicking
> out
>> there.
>>
>>
>>
>> Ian
>>
>>
>>
>> ----- Original Message -----
>>
>> From: Ian Spencer
>>
>> To: [email protected]
>>
>> Sent: Friday, July 31, 2009 4:10 PM
>>
>> Subject: Hi - just checking
>>
>>
>>
>> Not heard anything on the group for quite a while so just thought I would
>> send a 'test' to check it's not me that's got a problem and say hi to
>> everyone.
>>
>> I know you've all taken your Sam's to the beach and so no activity on the
>> group.
>>
>>
>>
>>
>>
>> Ian
>>
>>
>>
>>
>
>

Reply via email to