Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Page 1 of 2 12 LastLast
Results 1 to 10 of 13

Thread: Moving objects BIG distances

  1. #1
    Junior Member Newbie
    Join Date
    Nov 2009
    Posts
    4

    Moving objects BIG distances

    Hi!! I'm making a space simulator using VB and for that I'm drawing a sphere of radius=1738000. Obviously the objects floating around must be outside this sphere so they have xyz coordinates as big as the radius.

    The problem I'm having is: when moving the objects only fractions of units (for example moving from 1739000 to 1739000,05 - 1739000,10 - 1739000,15 - etc) the object seems to 'shake' in the axis where the object is moving. The cammera is commanded to follow the center of the object so I believe the problem is there, maybe the glLookAt cannot process such big numbers, I don't know...but when I work with small numbers it does not 'shake'...

    Thanks!!!!!!

  2. #2
    Advanced Member Frequent Contributor scratt's Avatar
    Join Date
    May 2008
    Location
    Thailand
    Posts
    556

    Re: Moving objects BIG distances

    I would suggest refactoring the numbers you are using.
    For example let's say a planet is 6000km in radius, use 6.00f for it's radius size, and scale everything else accordingly. You'll be making better use of the accurate range of your floating point numbers then. There are also doubles (I presume you have those in VB?).

    I have been working on various space sim engines for quite a while and as a rough rule of thumb if you use that number base then you can represent a fairly decent planetary system (modelled on our own) without jitter, all the way out to Pluto!

    If you need to represent coordinates larger than that then you'll need to use a custom number system which could be as simple as having integer sector coordinates, and doubles for coordinates inside each sector.

  3. #3
    Member Regular Contributor
    Join Date
    Apr 2007
    Posts
    271

    Re: Moving objects BIG distances

    This is a common problem. Try to scale your scene down.

    OpenGL has 32-bit floating-point precision, which is about 7 decimal digit of precision.

    ref: http://en.wikipedia.org/wiki/Floatin...dern_computers

    "Single precision, [...]. This is a binary format that occupies 32 bits (4 bytes) and its significand has a precision of 24 bits (about 7 decimal digits)."


  4. #4

    Re: Moving objects BIG distances

    We've had to deal with similar precision issues. Check out here for more information and other options.

  5. #5
    Senior Member OpenGL Guru Dark Photon's Avatar
    Join Date
    Oct 2004
    Location
    Druidia
    Posts
    2,882

    Re: Moving objects BIG distances

    Quote Originally Posted by C5C6ARG
    Hi!! I'm making a space simulator using VB and for that I'm drawing a sphere of radius=1738000. Obviously the objects floating around must be outside this sphere so they have xyz coordinates as big as the radius.

    The problem I'm having is: when moving the objects only fractions of units (for example moving from 1739000 to 1739000,05 - 1739000,10 - 1739000,15 - etc) the object seems to 'shake' in the axis where the object is moving.
    Use doubles to compute your composite MODELVIEW transform. Then thunk down to float only when you hand the finished product to OpenGL.

    Think about it this way. float gets you ~7 sigfigs. For your world-space, you're eating pretty near all of those on the shear magnitude of the numbers. You've got nothing left, so your quantization error is huge.

    What does this mean for objects close to the eye? HUGE translate in MODELING, HUGE inverse translate in VIEWING. Resulting MODELVIEW translate -- pretty tiny. But sorry, you lost all your bits doing that matrix compute in float, so you'll never really know how tiny to any accuracy.

    So don't. Use doubles.

  6. #6
    Junior Member Newbie
    Join Date
    Nov 2009
    Posts
    4

    Re: Moving objects BIG distances

    Thank you for your answers!!

    I'm using doubles as variable types. The video located on Wspace's site shows exactly what's happenning with my simulator. Unfortunately I'm such a beginner I cannot fully understand everything, it will take time to solve the problem.

    Wspace, if there's any way you could explain it to me any further I'll appreciate!! Thanks anyway!!

  7. #7
    Advanced Member Frequent Contributor scratt's Avatar
    Join Date
    May 2008
    Location
    Thailand
    Posts
    556

    Re: Moving objects BIG distances

    It's worth checking out Celestia. It's Open Source. Has a great community and there has been much discussion on 'Universal Coordinates' and the issues they pose both at local and universal levels...

  8. #8
    Senior Member OpenGL Guru Dark Photon's Avatar
    Join Date
    Oct 2004
    Location
    Druidia
    Posts
    2,882

    Re: Moving objects BIG distances

    Quote Originally Posted by C5C6ARG
    I'm using doubles as variable types.
    Are you using GL to do all your matrix math (glScale/glRotate/glTranslate/gluLookAt/etc.)? If so, there's your problem.

    Even if you provide double to GL, that's thunked down to float. GL/GPU pipeline is based on float, not double.

    Do your matrix math for building your MODELVIEW outside GL using your own math library. Then just hand the result to GL at the end via glLoadMatrixd.

  9. #9
    Junior Member Newbie
    Join Date
    Nov 2009
    Posts
    4

    Re: Moving objects BIG distances

    Quote Originally Posted by Dark Photon
    Quote Originally Posted by C5C6ARG
    I'm using doubles as variable types.
    Are you using GL to do all your matrix math (glScale/glRotate/glTranslate/gluLookAt/etc.)? If so, there's your problem.

    Even if you provide double to GL, that's thunked down to float. GL/GPU pipeline is based on float, not double.

    Do your matrix math for building your MODELVIEW outside GL using your own math library. Then just hand the result to GL at the end via glLoadMatrixd.
    that sounds interesting...could you give me an example??

  10. #10
    Senior Member OpenGL Guru Dark Photon's Avatar
    Join Date
    Oct 2004
    Location
    Druidia
    Posts
    2,882

    Re: Moving objects BIG distances

    Quote Originally Posted by C5C6ARG
    that sounds interesting...could you give me an example??
    An example of what?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •