Stephane,

I am fairly new to OSG, but I understand your problem quite well. I  
developed (and continue to maintain) a commercial solar system  
simulator. The scale runs from far flung trans-neptunian objects, to  
flying up and almost touching the ISS. Even without going to the  
stars, you simply cannot achieve this level of detail in a single  
coordinate system with OpenGL, regardless of your calculated  
precision. Instead of a brute force approach, you will need to  
partition your universe by scale. When flying between stars, you do  
not need the same frustum as when you are orbiting a planet. When  
visiting the space shuttle, you do not use the same frustum as when  
drawing the planet. Render the large scale universe first (but scale  
it down to smaller numbers). Then the intermediate, etc.

I've done this myself "manually"... I would be interested in hearing  
how to achieve this with OSG from other members. I imagine you will  
need to create more than one scene graph and "superimpose" them.

Richard

On Nov 12, 2007, at 4:55 AM, Stephane Lamoliatte wrote:

> Dear mister Osfield,
>
> I currently develop a space simulator working with very hight dynamic
> range data.
> During the development I met multiple floatting point number precision
> problems.
>
> For now, I try to solve one of these that come from OpenSceneGraph :
> For my scene, I need to use Matrices, Vectors and Quaternions with a
> very big accuracy. (I detail an exemple of osg accuracy problem  
> below).
> I wrote a Matrixr, a matrix of real, wich is a Matrix using the GMP  
> library.
> The problem is that I can't simply replace all matrices in the code of
> OpenSceneGraph by my Matrixr.
> I try to change the "typedef Matrixd Matrix" by "typedef Matrixr  
> Matrix"
> in osg/Matrix, but It does not work because some class don't use the
> Matrix but Matrixd or Matrixf.
> Another solution would be to develop new osg::Transform and
> osg::MatrixTransform using the real type and the Matrixr class. But I
> don't know how to make osg considers them as transform node without
> inherit them from the original osg::Transform node.
> By the way, I want to know if someone have already try to do this kind
> of thing, and/or if there is an accuracy node kit in development to  
> help me.
>
> Best regard.
>
>
>
>
> Here is a detailed example of my problem :
> There is a star far far away from the center of the universe.
> For some reasons I MUST have this scene graph :
> [rootNode : osg::Group] -> [starTransform : osg::MatrixTransform] ->
> [starModel : osg::Geode] -> ...
> The Matrix in the osg::MatrixTransform is a Matrixd that contains a  
> very
> big translation vector, for example at (x=10^20, y=0, z=0) from the
> center of the universe.
> I want to move in the universe, close to this star at (x=10^5, y=0,  
> z=0)
> from the star and then at (x=10^20 + 10^5, y=0, z=0) from the center  
> of
> the universe.
> To compute the MODELVIEW matrix, osg implicitly compute (x=10^20 +  
> 10^5,
> y=0, z=0) - (x=10^20, y=0, z=0) .
> But in fact, osg works like if the camera is in the center of the
> universe at (x=0, y=0, z=0).
> Why ? Because osg computes matrix transforms with float and double
> values. In double : 10^20 + 10^5 = 10^20.
> So I can't freely move in my universe using Matrixd and that's why I
> need more accuracy.
>
>
>
> --
> Lamoliatte Stephane.
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to