Re: sam birthday projects
samincanpyramidtotaleclipse? 2009/8/5 Simon Cooke si...@popcornfilms.com I had an idea a while back to release it as an Incan themed game - kind of like Prey, but set in an Incan pyramid on the North Pole that was revealed via global warming. Filled with... Statues of Ice :) -- Simon Cooke Director of Engineering / Business Developer, X-RAY KID STUDIOS - www.x-raykid.com http://www.x-raykid.com/ Founder, Popcorn Films - www.popcornfilms.com http://www.popcornfilms.com/ Cell: 206 250 7892 XBOX Live GamerTag: Spec Tec From: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Stefan Drissen Sent: Tuesday, August 04, 2009 12:01 AM To: sam-users@nvg.ntnu.no Subject: RE: sam birthday projects Cue Entropy - clouds of vapour anyone? ;-) _ Van: owner-sam-us...@nvg.ntnu.no namens Andrew Collier Verzonden: ma 2009-08-03 23:40 Aan: sam-users@nvg.ntnu.no Onderwerp: Re: Hi - just checking On 31 Jul 2009, at 18:46, LCD wrote: maybe everyone is busy with their next SAM Mega hit game? ;-). Actually, it's funny you should mention that Andrew -- http://www.intensity.org.uk/
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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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-Thomasmorriga...@aol.com wrote: I guess when the clocks go back in October SAM users will hibernate over the winter until next August! From: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Ian Spencer Sent: 04 August 2009 08:04 To: sam-users@nvg.ntnu.no 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: sam-users@nvg.ntnu.no 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
Re: Hi - just checking
what does vu3d use? On 05/08/2009, Thomas Harte tomh.retros...@gmail.com wrote: 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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-Thomasmorriga...@aol.com wrote: I guess when the clocks go back in October SAM users will hibernate over the winter until next August! From: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Ian Spencer Sent: 04 August 2009 08:04 To: sam-users@nvg.ntnu.no 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: sam-users@nvg.ntnu.no 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
Re: Hi - just checking
Oh, I'm currently using 2.14 fixed point for matrix components (engine goes Eulers - matrix, apply that) if that helps the discussion of the level of nuisance caused by numerical errors. Earlier versions of the code, including I think the version last provided on Sam Revival, used 8.8 fixed point throughout but that produced some visible precision issues. 2.14 isn't exactly perfect, but it's as good as things are going to get without a major speed tradeoff. The 2.14 is used only for matrix generation and composition (since objects are assumed to be positioned under the influence of exactly two matrices in my code — a camera matrix and an object matrix), it's rendered down to 8.8 for geometry transformation. On Wed, Aug 5, 2009 at 1:14 PM, Thomas Hartetomh.retros...@gmail.com wrote: 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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-Thomasmorriga...@aol.com wrote: I guess when the clocks go back in October SAM users will hibernate over the winter until next August! From: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Ian Spencer Sent: 04 August 2009 08:04 To: sam-users@nvg.ntnu.no 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: sam-users@nvg.ntnu.no Sent: Friday, July 31, 2009 4:10 PM Subject: Hi - just checking Not heard anything on the group for quite
Re: Hi - just checking
You mean the Psion one? No idea, as I've never used it or explicitly disassembled anything z80 related. I've entered the z80 assembly fold from the direction of writing emulators. I'd guess that if it's not intended to be particularly realtime then quite possibly they're using the floating point formats supported natively by the Spectrum ROM? It'd save a lot of code and solve a lot of issues, and while being far too slow for realtime it'd probably be fast enough for a rendering-type application. Just guessing, of course. On Wed, Aug 5, 2009 at 1:18 PM, Roger Jowettrogerjow...@gmail.com wrote: what does vu3d use? On 05/08/2009, Thomas Harte tomh.retros...@gmail.com wrote: 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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-Thomasmorriga...@aol.com wrote: I guess when the clocks go back in October SAM users will hibernate over the winter until next August! From: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Ian Spencer Sent: 04 August 2009 08:04 To: sam-users@nvg.ntnu.no 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: sam-users@nvg.ntnu.no Sent: Friday, July 31, 2009 4:10 PM Subject: Hi - just checking Not heard anything on the group for quite a while
Re: Hi - just checking
Oh, sorry, I think I missed the point of your question. My guess would be that it uses matrices internally, as they're a popular mathematical construct in a variety of fields but quaternions having been seriously out of fashion for at least a century. I have a degree in Maths Computer Science but don't recall meeting them even once during my studies — though a joint honours degree does necessarily end up reducing your exposure to either subject individually. Also, my guess is that the sort of literature related to computer graphics that is now extremely easy to access thanks to the web would have been really quite hard to access during the 1980s. It's like a hindsight thing. We're perched here at least two decades after computer graphics started to break out of academia and into widescale usage in consumer products, so we benefit from historical perspective and the entire body of knowledge is now much more accessible. On Wed, Aug 5, 2009 at 1:23 PM, Thomas Hartetomh.retros...@gmail.com wrote: You mean the Psion one? No idea, as I've never used it or explicitly disassembled anything z80 related. I've entered the z80 assembly fold from the direction of writing emulators. I'd guess that if it's not intended to be particularly realtime then quite possibly they're using the floating point formats supported natively by the Spectrum ROM? It'd save a lot of code and solve a lot of issues, and while being far too slow for realtime it'd probably be fast enough for a rendering-type application. Just guessing, of course. On Wed, Aug 5, 2009 at 1:18 PM, Roger Jowettrogerjow...@gmail.com wrote: what does vu3d use? On 05/08/2009, Thomas Harte tomh.retros...@gmail.com wrote: 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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
Re: Hi - just checking
I thought it was BASIC! 2009/8/5 Thomas Harte tomh.retros...@gmail.com Oh, sorry, I think I missed the point of your question. My guess would be that it uses matrices internally, as they're a popular mathematical construct in a variety of fields but quaternions having been seriously out of fashion for at least a century. I have a degree in Maths Computer Science but don't recall meeting them even once during my studies — though a joint honours degree does necessarily end up reducing your exposure to either subject individually. Also, my guess is that the sort of literature related to computer graphics that is now extremely easy to access thanks to the web would have been really quite hard to access during the 1980s. It's like a hindsight thing. We're perched here at least two decades after computer graphics started to break out of academia and into widescale usage in consumer products, so we benefit from historical perspective and the entire body of knowledge is now much more accessible. On Wed, Aug 5, 2009 at 1:23 PM, Thomas Hartetomh.retros...@gmail.com wrote: You mean the Psion one? No idea, as I've never used it or explicitly disassembled anything z80 related. I've entered the z80 assembly fold from the direction of writing emulators. I'd guess that if it's not intended to be particularly realtime then quite possibly they're using the floating point formats supported natively by the Spectrum ROM? It'd save a lot of code and solve a lot of issues, and while being far too slow for realtime it'd probably be fast enough for a rendering-type application. Just guessing, of course. On Wed, Aug 5, 2009 at 1:18 PM, Roger Jowettrogerjow...@gmail.com wrote: what does vu3d use? On 05/08/2009, Thomas Harte tomh.retros...@gmail.com wrote: 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto: owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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
Re: SAM's 20th Birthday
Chris Pile wrote: Yep - seems like it was early if it was around December time... Memory isn't too good these days! ;-)) I have a couple of projects I started 10+ years ago, but never finished. It would be nice to complete one of these in time for the SAM's birthday. I've just been made redundant - so I've probably got the time. Now I just need to get the enthusiasm to actually make a start... Oh, and to try and remember how to write Z80 too!!! It's been a while! ;-)) Chris Sorry to hear that! Times are indeed tough for many (inc me) at the moment. I've bitten the bullet and been ebaying my past away! You'll know first hand what a terrible hoarder I am, so it's going to take a while to get rid of it all! Might actually retain the Sam though. Suppose it still works. It's actually stilled packed in it's original box somewhere in the attic. A lot of my prototype interfaces were dumped though and the QL ones too, just didn't see the point in keeping them and probably worthless objects with no remaining documentation. Only one I think I still have is the VTX5000Sam i/f which you altered a version of the Sam Terminal s/w for.Still brings back a few memories! Wayne
RE: Hi - just checking
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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Wednesday, August 05, 2009 5:14 AM To: sam-users@nvg.ntnu.no 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 Cookesi...@popcornfilms.com 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Tuesday, August 04, 2009 10:05 AM To: sam-users@nvg.ntnu.no 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
Re: Hi - just checking
They're in some format or another that I don't recall offhand, but is lined up so that a full circle is a nice round binary number for the obvious range fixing optimisation. But it's not just a quick sin/cos table lookup unless you're rotating around one axis only. See, e.g. http://www.manpagez.com/man/3/glRotatef/ (the man page for glRotatef) — clearly there's a lot more going on there than table lookups. Of course, I am taking note of coherences. If the angles associated with an object do not change from one frame to the next, the source matrix is not recalculated. This optimisation postdates the version of my code that has already appeared on Sam Revival, but predates the next version (which is a better optimised version of the code shown in my video http://www.youtube.com/watch?v=j0xN_Mi3B_I) As I've posted to this list in the past, I use something vaguely like SIMD to multiply a 2d vector by a scalar — the relevant part of the scalar sits in the accumulator and is shifted there to make the add/don't add decision in the standard binary multiplication formula, meanwhile the 2d vector sits with the work going in for one component occupying BC, DE and HL, the work for the other occupying BC', DE' and HL'. Hence I get a substantial saving on multiplying the two vector components by the scalar separately. Naturally, I have a classic y = f((x^2)/4) table for the limited range multiplications (related to the maximum size an individual object may be). I assume your point about not accumulating transformations in matrices effectively means that you agree that quaternions are useful beyond interpolation and animation (which I'm interpreting quite narrowly to be the traditional skeletal type, not broadly to be any old moving image). Anyway, hopefully I'll be able to get myself in gear for a source release at some point in the near future, then you can rip it apart. It's all geared up to be trivial for other (assembler) coders to use to produce their own programs, handling triple buffering and frame rate compensation with very limited need for work on the part of the programmer (which neatly means that all my code scales really well from a normal Sam to a Mayhem or otherwise accelerated machine), etc. I tidied most of it up for a release quite a while ago but decided to switch to Jam rather than sticking on pyz80 because a lot of stuff would be substantially more compact and more readable with proper macro support. I also would much rather that the demo was seen first on Sam Revival rather than on the internet, both as a pathetic attempt to support the publication and because it looks much better on a real television. Never found time to convert it though, so it'll be a pyz80 release. Actually, the demo on the previous Sam Revival was explicitly flagged as PD, so I'll upload a DSK of that demo somewhere once the next edition is out. I think I mentioned every Sam program I've written in the SR article; you can see most of them very briefly in http://www.youtube.com/watch?v=kr_Lz98qVjEfeature=channel_page On Wed, Aug 5, 2009 at 10:16 PM, Simon Cookesi...@popcornfilms.com wrote: 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: owner-sam-us...@nvg.ntnu.no [mailto:owner-sam-us...@nvg.ntnu.no] On Behalf Of Thomas Harte Sent: Wednesday, August 05, 2009 5:14 AM To: