Re: sam birthday projects

2009-08-05 Thread Roger Jowett
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

2009-08-05 Thread Thomas Harte
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

2009-08-05 Thread Roger Jowett
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

2009-08-05 Thread Thomas Harte
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

2009-08-05 Thread Thomas Harte
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

2009-08-05 Thread Thomas Harte
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

2009-08-05 Thread Roger Jowett
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

2009-08-05 Thread Wayne Weedon

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

2009-08-05 Thread Simon Cooke
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

2009-08-05 Thread Thomas Harte
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: