OpenSceneGraph (OSG) FAQs 51 thru 100

FAQs 1 thru 51 square72_blue.gif FAQs 51 thru 100 square72_blue.gif FAQs 101 thru 150 square72_blue.gif FAQs 151 thru 200 square72_blue.gif


    I
    This unofficial Open Scene Graph (OSG) FAQ Part 2 ( 51 thru 100) is provided by Gordon Tomlinson , I hope you find the information contained with these FAQ's useful and helpful. If you have a tip, FAQ or code snippet you would like to share you can send it me at faqs@3dscenegraph.com and I will add to the FAQ, or if you spot an error in a FAQ or a change in OSG that makes a topic out dated let me know and I will get the items updated


     

  1. Integrated Graphics Card Problems
  2. Why Does my Application only Run at only 1-2hz
  3. What is a Pixel Format
  4. What does LOD stand for and What is a LOD
  5. What is a Symmetric Viewing Frustum
  6. What is an Asymmetric Viewing Frustum
  7. What is a Orthographic  Viewing Frustum
  8. What are Isectors
  9. What is a Line Segment
  10. What are the Difference between Real-time and Animation
  11. How Can I Convert my 3d Models to an OSG Format
  12. How do I Calculate the Vertical Field of View
  13. How do I Calculate the Horizontal  Field of View
  14. Why Does glReadPixels Capture other Windows
  15. How can I Force my Graphics Window on Top
  16. How  to stop  a Window being Ontop after using &wndTopMost
  17. How can I contribue to the Open Scene Graph
  18. How can I make Osg::ParticleEffect run for ever
  19. Best way to achieve Picking with OSG
  20. What are Reference Pointers
  21. How can I retrieve XYZ from scene view matrix
  22. How do I disable the automatic DOF animations
  23. How do I enable the automatic DOF animations
  24. What are Render Bins
  25. Can I share scene handlers between multiple camera
  1. What is the OSG co-ordinate system
  2. How to load a model without textures
  3. How replay a recorded animation paths in osgViewer
  4. How can I make and use a Perlin noise texture in OSG
  5. What is Producer
  6. Where can I find more information on Performer
  7. What is osgviewer
  8. What are the command line options for osgviewer
  9. How to set the background color in OSG
  10. Windows equivalent of GLX_SAMPLES_SGIS & GLX_SAMPLES_BUFFER_SGIS
  11. Why is there no cursor showing when I use Producer
  12. Texture not showing on my polygons why
  13. How to Print the SceneGraph out to a file
  14. How to specify the amount of Video memory to use
  15. Can I tell osgconv to use only the lowest LOD's from OpenFlight  files
  16. How to get the Normals from an Intersection test
  17. How can I dynamically turn a camaera On or Off
  18. Where are the Producer Camera Confige Examples
  19. Why do some of my DDS textures appear inverted
  20. Does OSG have an equivalent of glPushAttrib
  21. How can I search the OSG Mailing List
  22. .
  23. .
  24. .
  25. .

 

Resources

 

* 51  *  Integrated Graphics Card Problemsb

     

    Q: I'm using an Integrated Graphics Card  and I'm having problems with artefacts appearing and my frame rate is very poor.

    This is quite a common problem when using an integrated graphics cards (such as Intel 82845)

    Most OpenGL based programs such as Vega, Performer and OSG more than likely will have problems when they are used with integrated graphics such as the common  Intel 82845 chipset.

    The first thing to do is to visit the manufactures web site or contact their support channels to obtain their latest graphics driver for the card.

    Installing the newest  graphics driver normally helps to some extent, make sure you select at least 24bit or 32 bits for the colour,

    Also make sure and allocate as much RAM to the card as possible, you will need at least 64mb  the more they support the better, if you only have 32mb then your performance will not be good

    The performance of the integrated card can will always in most case be a lot worse the a dedicated graphics card as the integrated card in  most case use system ram, which slows it down and also place a lot of the processing of graphics commands on the machines normal CPU.

    To be honest integrated cards are terrible for 3d Real-time graphics, there fine for normal desktop activities but not graphics, the best recommendation I can give is to install a dedicate graphics card, you can get a  very reasonable card these days for say $100 or so which will blow away the integrate card.

     

* 52  *  Why Does my Application only Run at only 1-2hzb

     

    There can be many reasons that your simulation/application can be running at only 1-2 Hz or less.

    Typically this indicates that you may have dropped in to software rendering mode on your graphics card. This can happen when you set-up up Opengl and request your pixel format for the Opengl Window. Normally it means you have asked for a format or a setting that the card cannot support or does not support. I say cannot support as it may be that the resources of that card are limited when you request the pixel format, such as your resolution is too big for a 32bit z buffer, another Opengl has already consumed most of the resources etc. Or your requesting a setting not supported by your graphics card, you can find the formats supported by your cards with the following 

    On Irix you can use findvis on the command line to display the available bit plane configurations supported on the Irix system

    On Windows you can use a program from Nvidia to show the available bit plane configurations

    Then it might be a case you are trying to

    • display too much,
    • too many polygons
    • high screen resolutions
    • too many textures.
    • textures too big ( > 512,x512) ( for real-time try to stick below 512x512
    • Too many state changes
    • You Application is too complication making you CPU bound et
    • Your IO bound
    • Etc

    In this case you have to try and simply your application, reduce the data, reduce the applications work load, get fast machine, maybe use a multi-process machine, get better graphics, reduce your resolution etc

     

* 53  *  What is a Pixel Format b

 

    Each Opengl window uses a frame buffer, which is a collection of bit plane's storing the information about each pixel. The organization of these bit plane's defines the quality of the rendered images and is known as a Pixel Format.

    Pixel formats are made up from different Bit plane's which allocate for features such as:
     

      • colour information (RGB)
      • Alpha (transparency)
      • depth buffer(Z-bits)
      • Samples
      • Accumulation RGB Buffer
      • Accumulation Alpha Buffer
      • Stencil
      • Buffer Mode (Single/Double(default))

    Note that support for the various pixel format  configurations and combinations are not uniform across different Windows Graphics cards, Linux Systems and  Irix systems.

    Vega will ask the system for a bit plane specification supplied through the Lynx Windows panel settings or through code, the request may not be granted. When the notification level (in Systems panel) is set to Info or higher, messages tell the user which bit plane configuration is actually being used

    There are generally two methods of specifying bit plane configuration.
     

    • The first is to request individual assignments in each bit plane category by selecting values for a collection of option menus
    • The second method is to specify the value of the OpenGL Pixel Format  that contains a configuration acceptable to your application

    On Irix you can use findvis on the command line to display the available bit plane configurations supported on the Irix system

    On Windows you can use a program from Nvidia to show the available bit plane configurations http://developer.nvidia.com/object/nvpixelformat.html

    Color RGB
    Specifies the given number of bits for each of the Red, Green, and Blue components of each picture element. Larger values take longer to clear, and this may impact performance. Larger values per R,G,B produce smoother images because more colors are available. Vega runs in RGB or RGBA mode, not color index mode. 

    Alpha
    Some systems have storage of a fourth component, called alpha. This is used for transparency blending and storage of transparency values. It is possible to do some transparency methods without alpha planes. Alpha planes are required for any transparency method which requires that the current transparency level of a pixel be stored for later use.

    Depth Buffer Z Bits
    Depth information is stored in a Z-buffer. Larger numbers of bits allocated for the Z-buffer improve depth calculations and reduce "Z fighting". This effect occurs when the distance between two surfaces cannot be resolved within the numeric resolution. The image then flickers between the two surfaces. The near and far clipping plane distances also influence how the Z-bits store the depth information

    Samples
    Some systems, support multi-sampling. This technique allows each screen pixel to be resolved from a set of pixel fragments rendered at a higher resolution. This allows smoother, less jagged, images to be rendered. These images are referred to as anti-aliased. Aliasing is an artifact of digital sampling. The higher the number of samples for multi-sampling are supplied, the higher the quality of the images. The number of multi-samples available on a system is influenced by the resolution to which the display is set. On windows system this may need to be set at the graphics driver level first.

    Stencil
    The Stencil defines the number of bit plane's allocated for the stencil buffer. The statistics screen describing the fill rate of an application requires that there be at least 4 stencil planes allocated for the window's visual.

    Accumulation
    Species the number for red, green, and blue bits for an accumulation buffer, and also a number for alpha planes in the accumulation buffer. Some machines have hardware storage for accumulation buffers.

 

 

* 54  *  What does LOD stand for and What is a LODb


    LOD is an acronym for Level Of Detail (LOD)

    Basically the idea behind LOD processing is that objects which are barely visible don’t require a great amount of detail to be shown in order to be recognizable.

    Object are typically barely visible either because they are located a great distance from the eye point or because atmospheric conditions are obscuring visibility.

    Both atmospheric effects and the visual effect of perspective minimize the importance of objects at ever increasing ranges from the current observers eye point. The effect is that the perspective foreshortening of objects, which makes them appear to shrink in size as they recede into the distance.

    To improve performance and to save rendering time, objects that are visually less important in a frame can be rendered with less detail.

    The LOD approach optimizes the display of complex objects by constructing a number of progressively simpler versions of an object and selecting one of them for display as a function of range.

    An undesirable effect called popping occurs when the sudden transition from one LOD to the next LOD is visually noticeable.

    To remedy this SGI graphics platforms offer a feature known as Fade Level of Detail that smoothes the transition between LOD's by allowing two adjacent levels of detail to be sub-sample blended. This is now supported by most Scenegraphs, as long as there graphics support multi-sampling

    Here's a link to a Practical overview of an LOD 

 

* 55  *  What is a Symmetric Viewing Frustumb


    The Symmetric frustum defines the perspective projection applied to all scene elements processed for a channel. The near clipping distance is used to form a plane called the near clipping plane. The far distance defines the far clipping plane.

    For the symmetric frustum, both these planes are perpendicular to the line of sight of the viewer. The horizontal and vertical FOV's (fields of view) determine the radial extent of the view into the scene. FOV's are entered as degrees for the full width of the view desired. Entering a -1 for either but not both FOV causes the system to aspect match that FOV axis.

    For example suppose the horizontal FOV is 45 degrees and the vertical is set to -1. Once the window and channel are sized, the system selects the appropriate FOV degree for the vertical FOV to maintain an aspect ratio equal to that of the channel viewport.

    See vpChannel and the Vega Prime Programmers Guide for further details.

 

* 56  * What is a Asymmetric Viewing Frustum b


    An Asymmetric frustum or oblique projection is similar to the symmetric projection, except that the line connecting the center of the near face of the frustum with the eyepoint is not perpendicular to the near plane. That is, the line of sight is off-axis. This is useful for creating video walls, or matching the visual system to a specific video projection system, like a dome where the projection device is off axis to the screen.

     

    This type of perspective frustum requires six values to define it. Clicking on the Asymmetric Frustum option displays the six entry fields. The near and far values are the same as the symmetrical frustum.

    The left, right, bottom, and top values define the side planes of the frustum. They are the angle offset in degrees for the plane they represent.

    See vpChannel and the Vega Prime Programmers Guide for further details.

* 57  *  What is a Orthographic  Viewing Frustum b



    The Orthographic projection is a non-perspective projection. This means objects appear to be the same size no matter what their distance is from the viewer. Generally used for a Map view or Hud overlay view

    The sides of the frustum are parallel to the line of sight of the viewer. The Near and Far distances define the near and far clipping planes.

    The Left, Right, Bottom, and Top values define the frustum side planes. These values bear a direct relationship to the scale of the object being viewed.

    See vpChannel and the Vega Prime Programmers Guide for further details.

    Also see the following Viewing Frustum Overview Image

 

* 58  *  What are Isectorsb

     

    Isectors provide the ability to handle collision detection between objects within a Scenegraphs and are an essential part of most visual simulations

    For example, a typical need is to obtain the current Height Above Terrain (HAT) information in a flight simulator or a driving simulator is determined by firing a vertical line segment from the aircraft or vehicle towards the terrain/ground and calculating the distance between the aircraft or vehicle and the intersection point on the ground.

    Another example is the use of an Isector to pick or selecthings in the scene, this is typically done using an Line of Site (LOS) isector

     

* 59  *  What is a Line Segmentb


    Generally in a line segment is talked about and used as part of an Isector which is used for collision detection.

    A line segment in this case is defined by 2 XYZ vectors a Begin and an End position. A vpIsector class such as vpIsectorLOS will position and orientate the line segment.

    Basically speaking  the Isector will traverse its target scene graph and test a nodes bounding spheres against the Line segments. If no intersection is found then the node and all the nodes children are a rejected, this allows for fast collision detection.

    If an intersection hit is encountered with the bounding sphere the test can them become more fine grained test of each child node for an intersection until the leaf geometry node is reached, then data on the collisions detected can be stored such as pointers to node, position of intersection, the normal perpendicular to the intersection etc. (This is of course an oversimplification of a more complicated process)

     

* 60  *  What are the Differences between Real-time and Animation Applications b


    Animations are typically used for films, high resolution renderings, images for print, and pre-programmed demonstrations.

    Real-time applications are used in application where responding to user input is part of  the simulation, for example, during flight training and interactive architectural  demonstrations. Both real-time and animation applications simulate real and imaginary worlds with highly detailed models, produce smooth continuous movement, and render at a certain number of frames per second .

    Some of the main differences are: 

    • Real-time application frames are rendered in real time, which means the frames are continuously recalculated and rendered as the user changes direction and chooses where to move through the scene to view
    • Animation frames are pre-rendered, which means the animator sets the order of the frames and chooses the parts of the scene to view. Each frame can take hours to render
    • Real-time applications are highly interactive, and the user controls the movement of objects within the scene; animations do not allow for human interaction, and the user is a passive  participant 
    • The typical emphases of real-time applications are interactivity and purpose. Models in real-time applications typically have less detail than models that are used in animations to increase the rendering speed and shorten the latency period, which is the time delay from user input until the application makes an appropriate response. To achieve realistic real-time simulations, the latency period must be too short for the user to perceive
    • The emphases of animations are almost always non-interactive aesthetics and visual effects. Models in animations usually have much more details; mainly because the use of frames that pre-rendered ( which can take hours or days), the effect on drawing speed can be pre-determined
    • Real-time applications typically are displayed at various frame rates, which range typically require rate off 60 frames per second, this may change depending on application goals and screen complexity
    • While animations based applications usually display at standard 24 frames per second for every pre-rendered sequence of images ( which can take hours per frame compared 16.666 milliseconds for real-time at 60hz)

 

* 61  * How Can I Convert my 3d Models to an OSG Format b


    This would depend on what format your source models are in.

    Typically you should  be able to use a format conversion program such as Polytrans or Deep Exploration. These offer a good selection of import formats and the ability to output OpenFlight models.
     

* 62  *  How do I Calculate the Vertical Field of Viewb


    Here's one way that you could do this is along the following lines:
     

Formula :







                        


    aspect_ratio = channel_width / channel_height

    width = tan ( horizontal_fov / 2.0 ) * 2.0 * near_clip

    height = width / aspect_ratio

    vertical_fov =  2.0 * atan(  height / ( 2.0 * near_clip  ))

     

 

     

* 63  * How do I Calculate the Horizontal  Field of View b


    Here's one way that you could do this is along the following lines:

     

Formula :





                        


    aspect_ratio  =  channel_height / channel_width

    height = tan ( vert_fov / 2.0 ) * 2.0 * near_clip

    width = height / aspect_ratio

    horizontal_fov =  2.0 * atan( width / ( 2.0 * near_clip  ))

     

 

     

* 64  * Why Does glReadPixels Capture other Windows  b


    When I do a glReadPixels and write this out as an image file or to an AVI file, I get other windows captured, why.

    Presuming that when you do the call to glReadPixel you have other windows overlapping the graphics window, then it is likely that you will see the other windows in your capture

    Unfortunately This is not so much a platform issue as it is a consequence of the OpenGL specification.

    Paraphrasing section 4.1.1 "Pixel Ownership Test": ...if a pixel in the frame buffer is not owned by the GL context, the window system decides the fate of the incoming fragment; possible results are discarding the fragment...  Note that no mention is made of whether front or back buffer; it's entirely the window system's call.  Any code depending on a particular implementation's behaviour is very non-portable.

    This seem to be more of a problem for Windows users and not as much on X11 based OS's (although not guaranteed).

    On windows you can force you application to the stay on stop and then glReadPixel will capture just the applications window

     

* 65  * How can I Force my OSG Window on Top b


    On Windows this is quite straight forward using the following on your window
     

Code :

--


    RECT wpos;

     

    SetFocus();

     

    BringWindowToTop();

     

    SetWindowPos(  &wndTopMost,

     

                                wpos.left,

     

                                wpos.top,

     

                                wpos.right - wpos.left,

     

                                wpos.bottom - wpos.top,

     

                               SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOSIZE );

     

 

     

     

* 66  *  How Can I Stop My Window being Ontop after using &wndTopMostb

     

    How can I stop my OSG window from being on top after using &wndTopMost after using FAQ 65

    On Windows this is quite straight forward using the following on your window
     

Code :

--


    RECT wpos;

    SetWindowPos(  &wndNoTopMost,

     

                                wpos.left,

     

                                wpos.top,

     

                                wpos.right - wpos.left,

     

                                wpos.bottom - wpos.top,

     

                               SWP_NOMOVE | SWP_SHOWWINDOW | SWP_NOSIZE );

     

 

     

     

* 67  *  How can I contribue to the Open Scene Graphb


    You need to send the changes or additions as whole files to the osg-submissions mailing list along with an explanation of the changes or new features.  Please do not send diffs or copy and paste extracts of the changes in emails, as these will be simply discarded by the integrators, as they are too unreliable for review and merging and can lead to too many errors.

    Alternatively you can also post changes and  submissions under the Community section of the Open Scene Graph web site. This is particular appropriate for complete new functionality such as Node Kits and Plug-ins, you can then inform the world via the osg-users or osg-submissions list of this entry

     

* 68  * How can I make Osg::ParticleEffect run for ever b


    Simply set the Lifetime of the ParticleEffect to '0' and the effect should then continue to run until you stop the effect or kill the application

    Particle::setLifeTime(....);

     

* 69  * Best way to achieve Picking with OSGb


    Q: I want to do picking in OSG should I use the osgpick demo which uses the intersectVisitor, or would I be better Opengl directly such as that found in  Max Rheiner'a GLPick demo ?

    Using IntersectVisitor is more efficient than using GLpick. The reason for this is that GL pick requires a round trip to the graphics pipeline and this is I/O bound and is generally an expensive operation . The IntersectVisitor does ray/line segment  intersections very efficiently by means of using the scene graph, node's bounding spheres and trivial rejection, all in the CPU, memory bound operations. 

    Note that what is lacking in the  current IntersectVisitor implementation, is the ability to pick lines and points. There are only ray intersections, which can intersect triangles and bounding volumes

     

* 70  *  What are Reference Pointersb


    Q: I see references to "Reference Pointers" all through the OSG source, but what are Reference pointers?

    "Reference Pointers" can also known as "Smart Pointers", "Auto Pointers", and may have different functionality, but are principally the same thing

    In brief, "Reference Pointers" are C++ objects that simulate normal pointers by implementing operator-> and the unary operator*. In addition to sporting pointer syntax and semantics, "Reference Pointers" often perform useful tasks such as memory management, reference counting, scope, locking all under the covers thus freeing the application from carefully managing the lifetime of pointed-to objects

    Here's a link to great right up on Reference Pointers with OSG by Don Burns. this should give you more than enough information to get you by

    http://dburns.dhs.org/OSG/Articles/RefPointers/RefPointers.html

    Other Articles by Don can be found here http://dburns.dhs.org/OSG/Articles

     

* 71  *  How can I retrieve XYZ from scene view matrixb

     

    To retrieve the current XYZ from Scene Views matrix you can do something along the lines of :

     

Code :

--

     

    osg::Matrix matrix  = m_sceneView->getViewMatrix();

    osg::Vec3 xyz( matrix(3,0), matrix(3,1), matrix(3,2) );

     

 

 

* 72  *  How do I disable the automatic DOF animations b


    For a single DOF transformation node  node you need to find or get a pointer to the node and then simple call the:
     

Code :

--

     

    osgSim::DOFTransform *m_myDofTransform = findMyDofNode( ... );

    m_myDofTransform->setAnimationOn( false );

     

 

    For multiple DOF nodes you  need to load your model or grab a pointer to a node then traverse using a custom NodeVistor and call the following  function on the node 'doftransform->setAnimationOn( false)' on all the transform nodes found. Code for the node visitor would look something lthe following:

     

Code :

--

     

     

class CswitchOffAnimation : public osg::NodeVisitor  {

     

    public :

     

    CswitchOffAnimation () :

     

           osg::NodeVisitor( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN ){ m_aniState = false; }

     

     

    virtual void

    apply( osgSim::DOFTransform &transform )  {

                

     

    osgSim::DOFTransform *doftransform = dynamic_cast< osgSim::DOFTransform * >( &transform );

     

        if ( doftransform != NULL )

            doftransform->setAnimationOn( false );

            

          traverse( transform );

           

     } // func apply

     

     

    void

    setState( const bool state ) { m_aniState = state; }

     

     

    private :

     

    bool m_aniState;

     

} ; // class  CswitchOffAnimation

     

     

 


    You can then call the node visitor in on your node or newly loaded model

     

Code :

--

     

    CswitchOffAnimation  setAniVisitor;

     

    //

    // Switch the animations OFF

    //

    setAniVisitor.setState( false );

     

    m_myNode->accept( setAniVisitor );

     

     

     

    //

    // Switch the animations On

    //

    setAniVisitor.setState( true );

     

    m_myOtherNode->accept( setAniVisitor );

     

     

 

     

* 73  * How do I enable the automatic DOF animations b

     

    For a single DOF transformation node  node you need to find or get a pointer to the node and then simple call the:
     

Code :

--

     

    osgSim::DOFTransform *m_myDofTransform = findMyDofNode( ... );

    m_myDofTransform->setAnimationOn( true );

     

 

    For multiple DOF nodes you  need to load your model or grab a pointer to a node then traverse using a custom NodeVistor and call the following  function on the node 'doftransform->setAnimationOn( true)' on all the transform nodes found.

    See the code for the node visitor in FAQ 72:

     

* 74  *  What are Render Bins b


    A quick overview of Render bins :

    During the cull traversal, a Open Scene Graph can rearrange the order in which Geometry is rendered for improved performance and image quality. Open Scene Graph does this by binning and sorting the geometry.

    Binning is the act of placing Geometry into specific bins, which are rendered in a specific order. Open Scene Graph provides two default bins:

    • one for opaque geometry
    • one for blended, transparent geometry

    The Opaque render bin is drawn before the Transparent render bin so that transparent surfaces can be properly blended with the reset of the scene.

    Open Scene Graph applications are free to add new render bins and to specify arbitrary render bin orderings and the type of sorting within the render bins them selves

    A good source of information on Scene Graph, it components, traversal and Render bins can be found in the SGI Performer Online Documentation

     

* 75  *  Can I share scene handlers between multiple camerab

     

    Unfortunately  currently the answer is  No  you cannot share scene handlers between cameras. 

    Each camera must have a unique Scene Handler, each Scene Handler will have its own SceneView and each Scene View's State should have a unique contextID

    The Pseudo code goes something like this:

     foreach camera N

           cameraN = create Camera;

           osgProducer::OsgSceneHandler sh = create SceneHandler;

           sh->getSceneView()->getState()->setContextID(N);;

           cameraN->setSceneHandler(sh);

     

* 76  *   What is the OSG co-ordinate systemb

     

    The short answer that most of the Open Scene Graph examples and manipultors adhere what is found in most simulation packages which is:

    • X+ = "East"
    • Y+ = "North"
    • Z+ = "Up"

     

    The orientation is imposed by the osgGA matrix (and therefore camera) manipulators.  By default the osg core does not impose anything on the OpenGL default which is:

    •  X+  "to the right"
    •  Y+  "up"
    •  Z+  "out of the screen"

     

* 77  *  How to load a model without texturesb


    Currently there is no formal way of loading a model in to Open Scene Graph and have the loading ingore/not load the models textures

    You could possibly :

    • Setting the file paths so the textures are not found
    • Rename your texture directory
    • Create a copy of your model with no textures
    • Load into OSG traverse the tree and remove all texture states then save as OSG/IVE

     

    Also see FAQ 46 How to disable Textures on a osg::Node

     

* 78  *  How replay a recorded animation paths in osgViewerb

     

    To replay a previously recorded animation path in the osgViewer you can do the following

    osgviewer mymodel.osg -p saved_animation.path

     

* 79  *  How can I make and use a Perlin noise texture in OSGb

     

    You can find an example of generating a Perlin noise texture in the osgshaders example, it is used for the marble and erode effects.

    Here's one link to an article on Perlin noise texture usage

    http://www.engin.swarthmore.edu/~zrider1/advglab3/advglab3.htm

    Try a google for more links there are many :)

    http://www.google.com/search?q=perlin+noise+opengl

     

* 80  *  What is Producerb


    Producer ( more correctly  Open Producer) is a cross-platform C++/OpenGL library that is focused on Camera control. Producer's Camera provides projection, field of view, viewpoint control, and frame control and is used by Open Scene Graph.

    Producer can be used in a multi-tasking environment to allow multiple Camera's to run in parallel supporting hardware configurations with multiple display subsystems. Threading, Camera synchronization and frame rate control are simplified in the Pro