Vega  FAQ's FAQs 51 thru 100

FAQs 1 thru 51 square72_blue.gif FAQs 51 thru 100 square72_blue.gif FAQs 51 thru 100 square72_blue.gif FAQs 51 thru 100 square72_blue.gif FAQs 201 thru 250 square72_blue.gif FAQs 251 thru 300

 

  1. Where are the vgPicker man pages
  2. How can I use the full path when loading a DataSet
  3. How can I use the full path Name in Lynx & ADF's
  4. How can I hide a vgObject
  5. How can I hide a vgPart which is part of a vgObject
  6. How can I display a vgObject again after it was hidden
  7. How can I display a vgPartt again after it was hidden
  8. Can I draw an Object in One Channel and not in Another
  9. How do I move an object between to or more Points
  10. How to pick a static object using vgPicker

Faq's

 

* 151  *  What Sensor Products are available for Vega   up

     


    MultiGen-Paradigm has an excellent set of optional Sensor suites modules for MultiGen-Paradigm Vega, Vega provides 3 primary Sensor Modules:

     

    • Sensor Vision which is a software toolkit that computes and displays quantitative infrared sensor images of any environment containing natural backgrounds, cultural features, and dynamic objects
    • Sensor Works  increases the functionality of SensorVision by applying realistic sensor effects to the rendered SensorVision image. SensorWorks effects can be visually specified via graphics parameters or analytically specified via actual sensor parameters to match the characteristics of a wide range of specific sensors.
    • Radar Works creates real-time, physics based simulations of imaging radar operating against synthetic environments comprised of natural backgrounds and cultural features.
      RadarWorks operates on the same synthetic environments as Vega and SensorVision, to produce correlated out the window, infrared, and radar views
       

* 152  *  Why is the no Sensor information in these FAQ's up


    Due to the nature of MultiGen-Paradigm's Senor Suite products they fall under export restrictions imposed by the US State department and thus the dissemination of information and code on these products is also restricted and I fully respect those restrictions, thus I'm unable to provide code and FAQ's on the Sensor products

    For further information and Help and the Sensor product you need to contact the MultiGen-Paradigm support department directly and they will be able to discuss you question and concerns directly, but note that are also bound by the restrictions imposed by the US state department.
     

* 153  *  I can see my Creator Terrain file in Vega up

     

    One reason might be because when MultiGen Creator builds a terrain file it will apply it's real world coordinate positions which is then picked up by Vega when the files is loaded

    And what you usually find is that the user is initialising their observer at the default coordinate origin of 0,0,0 but the terrain is being read in and positioned thousands on miles/kilometres away

    What you can do correct this situation is to use MultiGen Creator to find the coordinates of the terrain and enter them as an the start position for the Observer in Lynx, alternatively you can use the Object Viewer in Vega to find the location

    Also you might be at the centre of your terrain but just  under there terrain and as by default Vega does not render back faces you will not see the terrain. You can again correct his in the same manner as above.

    Another problem might be that the scale of the terrain is wrong check the units you modeled are not say millimetres, as the default units for Vega is Meters.

    Also check that the file is actually being loaded, look in the console to see if there were any warning about not being able to load the file
     

* 154  * How can I find the Z at a given point on my terrain up


    If you now the X and Y position that you want to find the Z then you can simple use a vgIsector such as Z or Hat Isector.

    You would then simply position the vgIsector at the given X and Y coordinates, do the intersection test and retrieve the Z from the returned Hit results

    See the examples provide with Vega 

    • ...\Sample\Vega\pguide\ch08\Z
    • ...\Sample\Vega\pguide\ch08\hat
    • ...\Sample\Vega\pguide\ch08\xyzpr


     

* 155 * How can I reverse the Direction of my vgNavigator  up


    Unfortunately the vgNavigator does not provide any built-in of automated way of reversing along it path


     See vgSplineNavigator further details on the vgNavigator Class
     

* 156  * What are vgNavigator Control Point Event Markers  up


    A control point "Event Marker" is a data structure in a vgNavigator which is associated with a control point in a path file.

    The vgNavigator class  process the event marker data and perform the actions it specifies during path traversal. A vgNavigator must contain at least one event marker per control point. The  vgNavigator interprets these markers and uses their data to determine how to traverse between two control points or what specific actions to take when a certain control point is reached.

    So basically the Control Point Event Marker define how the vgNavigator traverse its path. The Event Marker can be created and set either through API or through the Vega Lynx Path Tool. A Control point can have multiple Event Makers

    See vgSplineNavigator further details on the vgNavigator Class

* 157  * What types of Control Point Event Markers are there  up

     


    vgNavigator's support the following 14 Control Point Event Markers:

    • VGNAV_EMPTY

     

    no action, the default event marker for each control point as each control point must have an event marker

    • VGSPLINENAV_DURATION

     

    The time in seconds, that the navigator will  traverse the path segment

    • VGSPLINENAV_VELOCITY

     

    The speed in database units per second, that the Navigator will traverse the along segment at a constant velocity

    • VGSPLINENAV_VELOCITIES

     

    The speed in database units per second ,that the Navigator will traverse the segment with velocity, starting Speed at control point index and the End Speed at control point index + 1

    • VGSPLINENAV_LINEAR

     

    Traverse the segment in a linear interpolation method, this is an event marker must be the first marker for the control point.

    • VGSPLINENAV_HERMITE

     

    Traverse the segment in using hermite spline interpolation method, this is an event marker must be the first marker for the control point

    • VGSPLINENAV_TANGENTS

     

    Set tangent vectors at each control point of a hermite spline segment if tangents are not specified, the spline will default to a cardinal spline

    • VGSPLINENAV_LOOP

     

    This closes the path by constructing a segment from the last control point to the first control point; The marker can occur at any control point index

    • VGSPLINENAV_RESTART

     

    This tells the path not close the last and first segments, but to restart abd traverse the path again once the  end of the path has been reached, this marker can occur at any control point index

    • VGSPLINENAV_START_INDEX

     

    Set the control point index to for were to begin traversing along the path, the default is control point index 0

    • VGSPLINENAV_START_DELAY

     

    Always a delay on the path starting such that the traversing of the path is delayed for a specified number of seconds

    • VGSPLINENAV_ABSOLUTE_HPR

     

    This event marker tells the navigator to interpet the HPR as additive to the curve or absolute (i.e. whether or not a control points HPR is relative to the curve or in world coordinates) VG_TRUE or VG_FALSE.  VG_FALSE is the default behavior.

    • VGSPLINENAV_LOOK_AT

     

    This event tells the navigator to turn and to look towards the given  point in space for the duration of a segment

    • VGSPLINENAV_TENSION_FACTOR

     

    This event controls how loosely or tightly that the cardinal spline fits through the control points

     

     

     

* 158  *  Can  I attach a vgPart to a vgNavigator  up


    No you cannot directly attach a vgPart to a vgNavigator in the same wasy you cannot attach a vgObject directly to a vgNavigator,you can only attach a vgPlayer to a vgnavigator and only attach a vgObject or another vgPlayer to a vgPlayer

    If you wanted to do this you would have to:
     

      • Detach your vgPart from its Parent vgObject
      • Create a new vgObject using the vgPart
      • Attach the vgObject to a vgPlayer
      • Attach the vgPlayer to a vgnavigator


         

* 159  *  What is a Spline up


    Spline curves are relatively easy to calculate but very powerful to use and extremely useful. They are used to smoothly interpolate data between key-points, here's some useful links that explain spline in all their detail

     

    • http://www.cubic.org/~submissive/sourcerer/hermite.htm
    • http://www.math.auckland.ac.nz/~waldron/Hermite/hermite.html
    • http://hejl.com/faq/Hermite.htm
    • http://www.francischang.com/morph/#A_Brief_On_Splines
    • http://designer.mech.yzu.edu.tw/article/articles/course/(2000-10-02)%20Curve%20representation.htm
       

* 160  * How can I create a vgPath and vgNavigatorup


    There are 2 ways to create a vgPath and vgNavigator.( Note that multiple vgNavigators can share one vgPath)

     

    • The first way is to use the Vega Path Tool, which you launch from Vega LynX.
    • The second way is through API, see this Code example for the basics


    See vgSplineNavigator further details on the vgNavigator Class
     

* 161  * How  Can I set the Start Index of a vgNavigator  up


    This is quite straight forward using the VGSPLINENAV_START_INDEX property for the vgNavigator, for examples

     

    Code :

    --


      int startIndex = 2;

      vgProp( myNavigator, VGSPLINENAV_START_INDEX, startIndex );   

       

     

    Note that the default start index is the first control point which is index 0;

    See vgSplineNavigator further details on the vgNavigator Class
     

* 162  * How can I tell the vgNavigator to Stop at the End of the Path up


    To make a vgNavigator stop at the end you would do:

     

    Code :

    --


      vgProp( myNavigator, VGSPLINENAV_STOP_AT_END, VG_ON );

       

     

    See vgSplineNavigator further details on the vgNavigator Class
     

* 163  * How can I tell the vgNavigator to Restart a the End of the Path  up


    To make a vgNavigator continue at the end you would do:

       

    Code :

    --


      vgProp( myNavigator, VGSPLINENAV_STOP_AT_END, VG_OFF );

       

     

    See vgSplineNavigator further details on the vgNavigator Class
     

* 164  * What is the max number of control points for a vgPath and vgNavigator  up


    The vgPaths use an INT  for the number of controls points which means on Windows you could have as many as INT_MAX = 2147483647 depending on your memory etc.

    See vgSplineNavigator further details on the vgNavigator Class
     

* 165  * Why are my Texures do Dark on NT but ok on Irix  up


    If your using textures that were created on an SGI Irix Machine then this is a known issue in the differnces between Irix and Windows

    SGI Monitors and graphics hardware uses a differnt setting for the Gamma output to that of a PC

    So normally a the PC textures will look very bright on SGI machines while a SGI texture will look very dark

    If we say that the SGI machines have a Gamma value of 1.0 then we can say the Windows PC's machines have a gamma value of around 1.7, this is typically the differnce in gamma

    So the solution is to adjust your textures gamma/brightness either up or down depending on where they are being used
     

* 166  * How can I create an AVI or Movie of My Application up


    There are several ways to create a Movie of a Vega Application

     

    1. Use a Video card that has a S-Video output and connected up to a Video camera that accepts
    2. Higher an Audio Visual company to capture the output and any audio with professional AV equipment ( or use your own professional equipment)
    3. While running your application use the glReadPixels to capture the screen and use that to create and AVI/MPEG file using the appropriate API.
    4. Vega ships with a simple examples that shows you some of the basics on creating an AVI, the samples is typically found  in ( Vega install location) Sample\Vega\pguide\ch03\MFCVega ).

      The down side of he sample is that it needs use interaction and using glReadPixels is expensive and you will find it hard to control your application.

      Another way which I have used in several cases, is to basically script your run-time such that you can replay it back with out user interaction. Typically you can use things like vpNavigators for dynamic objects,. If you have say update data coming in from a host simulator etc then you will need a method to record and play these back as well etc.

      So you then control the speed of the application using frame time stamps

      What's this means is that you can then take as long as needed to render  each frame, in fact you this usually means that you can use higher resolution than can in real-time. another benefit is you can also pause the process

      Pseudo code is along these lines:

        1) Get the reference time

        2) Set number of frames a second

        3) Work out the frame delta times

        4) Work out the total number of frame required

        5) for each frame

          6) Set the Vega frame time stamp

          7) Update Vega

          8) Vega Draws the Frame

          9) Capture the Frame

          10) Process the captured frame with the AVI api

          11) workout the next frame time stamp

          12) inc frame number

          13) goto 5, until no frame left

       

 

* 167  * Can I get the Position of the Sun or Moon  up

     

    Unfortunately with Vega you cannot actually retrieve the celestial positions of the Sun or Moon, neither can you retrieve the local application positions of the Sun and Moon

 

* 168 * Can I use OpenGl with Vega  up


    Yes you can intergrate OpenGL functions calls with in a Vega based program. OpenGL needs a valid draw context inorder to work, win Vega prime the draw context is created in the DRAW process.

    Because the DRAW process is were the draw context is created and own to use Opengl you will have to either create Pre/Post draw callback functions on either a vgChannel or pfNode.

    See the Vega forums on the MultiGen-Paradigm web site, a quick search using key words such as draw call backs  or Opengl will show you past discussions and possible examples

    (at some point in the near future, I should have some simple examples on for this site)

* 169 * Why do things look wrong after I use OpenGL  up

     

    Note that Vega, Vega Prime,Performer and OpenGL use  lazy state evaluation for reasons of performance, as state chaning can be expensive in the graphics pipe line.

     

    So basically any state change you make with you Opengl Code you typically will need to restore to it previous value, also you have to set the OpenGL state to that which you require to achieve you goals

     

    You would do something along the lines of:

    Code :

    --


      Enter your draw function ............

       

       

      //

      // Save the current state

      //

       

      pfPushState();

       

      pfPushMatrix();

       

      //

      // Set up a basic state

      //

       

      pfBasicState();

       

       

      Do you OpenGL stuff .................

       

      Set you Opengl state ................

       

      Draw you stuff.......................

       

      //

      // Restore to entry state

      //

       

      pfPopMatrix();

       

      pfPopState();

       

       

      Exit your draw function .............

       

       

     


     

* 170 * How do I find a Switch Node in a vgObject up


    To find a a Switch node in a vgObject you need to use Performer functions to find the node

    First you have to get the root pfNode from a vgObject and then use pfFindNode e.g.

* 171 *  How do I set a Switch Value up

* 172 * What is a Switch Node Mask up


    A Switch node mask is a powerful extension from Multigen-Paradigms to the pfSwitches node. Basic Switch nodes all the use to the API to draw either ALL the nodes children, None of the children or One of the Children.

    For example:

      if we have a switch node that has 4 nodes A B C D, we can draw [] or [ABCD] or [A]or [B] or [C] or [D], we can not have [AB] or [BC] with a basic switch node
       

    Switch masks add a Powerful features to switch nodes that all Mask to be used to decide with children to draw, so that as  cobinations such as [AB] or [BC] or [ACD] can be used as well as None or All children.

    With Switch mask when we set an index to enable a chile such as 'pfSwitchVal( switchNode, childNumber )' we are selecting the Mask to draw and not the child.

    In Performer and Vega switch maskes cannot be created they have to be created in a modeling package such as Multigen-Paradigm's Creator., on basic switches can be created via code.
     

* 173* How do I remove the Switch Mask up


    It is possible to remove the Switch mask nodes so that the Switch will be have as basic switch. The Openflight loader for Vega and Performer creates a special node when a switch node is load from a file. This node allows for the use of Switch masks

     The How to Restructure a Switch Node code sample shows how to remove the special switch mask controller node
     

* 174 * How can I find the number of pfGeoSet's in an vgObjectup

     

* 175 * How can I find the number of pfGeoSet's in an vgPartup

* 176 * How Do I load a 3d Model in Vega  up

     


    In order to load a 3d model in Vega you can either

     

* 177 *  How can I create or use Opengl with an Object up

     

    Yes you can use Opengl with a vgObject, similar to the manner of using Opengl with a vgChannel Pre/Post draw callbacks.

    Basically you have to create a dummy vgObject with a pfGroup node to use as the hooks for the Pre-draw callback to place the Opengl call in.

    Remember that to use Opengl in Vega you need a draw context which has a valid OpenGl context

    See Opengl with a Vega Object code sample for full details on how to achieve this

     

* 178 * Can I use Vega in side my own application up

     


    Well it depends on what you mean by you own application.

    If you mean inside a Win32, MFC, QT, X11 Motif based application then yes of course.

    But if you mean inside of a container such as ActiveX or COM object, DLL etc then in most cases NO simply because Vega and SGI Performer are not designed to be re-enterant they are designed to close and fully exit which normally will kill your container application as well or result in large memory leaks, I say in most case becuase I know of some people that have had limited success with ActiveX

    I would recommend moving across to Vega Prime if you need to use a container such as ActiveX

     

* 179 * Were are the Vega Man Pages for Window up

     


    As Microsoft Windows does not directly support the MAN page format, The Man pages are distributed as HTML files with Vega NT, although slightly out of date.

    The most up to date HTML Vega Man Pages can be found here on line, aso the can be download in a zip file from MPI

     

* 180 * What version of Open flight is supported by Vega  up


    Vega for NT 3.71 supports Openflight  15.7

    To check simple load a flight file and in you console window when you load an Open Flight you should see something akin to the following

      ========================================================================

      MultiGen Inc. OpenFlight (r) loader R15.7a

      for Vega $Date: 2002/05/13 16:42:11 $

      ========================================================================

      Copyright (c) 1986-2001 MultiGen-Paradigm Inc.

 

* 181 * Can I use a USB devices with Vega up


    Well Yes and No.

    Vega will work with standard USB devices Keyboards, Mice, Ball Mice etc. Other devices may or may not works, as the Input library used by Vega is quite old and looking for Serial Port or IP port devices. It might by worth contacting MPI support directly to see if they can offer any advice on getting certain USB devices to works
     

* 182 * Where are the vgPicker man pages up


    The Man Pages shipped with Vega are unfortunatley a little out of date and synch, The most up to date HTML 
    Vega Man Pages can be found here on line, aso the can be download in a zip file from MPI

    The vgPicker man Page can be found in the above HTML pages (vgPicker.html)
     

* 183 * How can I use the full path when loading a DataSet   up

     


    To use the full path name simply use the full file path and name with the vgRemSceneObj call when setting the vgDataSet Name e.g

    Code :

    --

       

      vgName( dataset, "c:\\work\\project1\\models\\urban\\house05.flt" );

       

     

    Remember the setting the Name of a vgDataSet actaully also sets the path and file name to load in to the vgDataSet ( go figure whos bright idea this was)
     

* 184 * How can I use the full path Name in Lynx & ADF's  up


    In the Vega Lynx ADF application, If you use the file dialog to browse to a file , then Lynx  ill only use the file name and extension and strip the full path off.

    Note that the full path is not lost  but will added to the vgPath which Vega use to find textures, models and other resources

    To use the full file name and path the simpy enter the full path and name in the text box's with out using the file browsers


     

* 185 *  How can I hide a vgObject up

     


    There is at least a couple of ways to hide an vgObject.

    Firstly you could simply remove the object from the vgScene with a call to vgRemSceneObj( m_scene, m_object );

    If for some reason you want to get the vgobject i the scene but hide it then you have to do a little extra work and set the Draw Mask on the vgObject's Performer root node, along the following lines

    Code :

    --

       

      pfNode *objNode = ( pfNode* )vgGetObjPfNode( m_myObject );

      pfNodeTravMask( objNode, PFTRAV_DRAW, 0x0, PFTRAV_SELF, PF_SET );

       

     

    This works by setting the mask to 0x0, which when logically anded with the vgChannels pfChannels draw mask stops the node and its children being drawn.

 

* 186 *  How can I hide a vgPart which is part of a vgObject up

     

    This can be achieved in the same way an vgObject can be hidden using the vgParts pfNode to set its Draw Mask:

      Code :

      --

         

        pfNode *partNode = ( pfNode* )vgGetObjPfNode( m_myPart );

        pfNodeTravMask( partNode, PFTRAV_DRAW, 0x0, PFTRAV_SELF, PF_SET );

         

       


* 187 *   How can I display a vgObject again after it was hidden up


     This is quite simple:

    If the Object was hidden by removing it from the vgScene the simple call vgAddSceneObj( m_scene, m_object ); to add the oject back in to the Scene.

    On the other hand if the vgObject was hidden youusing the draw mask then do something along the lines of:

    Code :

    --

       

      pfNode *objNode = ( pfNode* )vgGetObjPfNode( m_myObject );

      pfNodeTravMask( objNode, PFTRAV_DRAW, 0xFFFFFFFF, PFTRAV_SELF, PF_SET );

       

     

 

* 188 *    How can I display a vgObject again after it was hidden up


     
    This can be achieved in the same way an vgObject can be displayed using the vgParts pfNode to set its Draw Mask:

    Code :

    --

       

      pfNode *partNode = ( pfNode* )vgGetObjPfNode( m_myPart );

      pfNodeTravMask( partNode, PFTRAV_DRAW, 0xFFFFFFFF, PFTRAV_SELF, PF_SET );

       

     

 

* 189 *   Can I draw an Object in One Channel and not in Another up

     

    Yes you can draw a vgObject in one channel and not another, this can be a achieved using use Draw masks on the pfChannels and vgObjects

    We do this by setting 2 different draw masks on the vgChannels, the default Draw masks for every things is 0xFFFFFFFF so that all every thing will be drawn in all channels

    So we would set the draw mask on the 2 channels to be different, then set the draw mask of the vgObject to just match the draw mask of channel 0 so that  0x0000FFFF Logical AND  0x0000FFFF results in 0x00001111 so that the object will be draw in the channel 0, while the draw mask of channel 1  0xFFFF0000Logical AND  0x0000FFFF results in 0x00000000 will not be draw in the channel 1

    Code :

    --

       

      pfChannel  *chan0 = ( pfChannel*) vgGetPfChan( vgGetChan(0) );;

      pfChannel  *chan1 = ( pfChannel*) vgGetPfChan( vgGetChan(1) );

      pfNodeTravMask( chan0, PFTRAV_DRAW, 0x0000FFFF, PFTRAV_SELF, PF_SET );

      pfNodeTravMask( chan1, PFTRAV_DRAW, 0xFFFF0000, PFTRAV_SELF, PF_SET );

      pfNode *node = ( pfNode * ) vgGetObjPfNode( vgGetObj(0) );

      pfNodeTravMask( node, PFTRAV_DRAW, 0x0000FFFF, PFTRAV_SELF, PF_SET );

       

     

 

* 190 *   How do I move an object between to or more Pointsup


    The easiest way to achieve this would be to use the Vega Navigator and Path classes to create a path and a navigator to follow the path.

    Alternatively you could write some code to do simple linear interpolation and move the object by some delta each frame.

    See Vega Programmers Guide and Lynx Guides for further details on vgNavigator's and Pathing tool.
     

 

* 191 *   How do I follow an Objectup


    The easiest way would be to attach the vgObject of Interest to a vgPlayer, then move the vgPlayer rather than the vgObject. The to follow simply attach the vgObserver to the vgPlayer and set the required offset behind the vgPlayer.

    See the Code example switchObvserver2Player for further details on how to follow a vgPlayer

    Alternatively the harder way would be :

      On every frame

      Get the vgPosition of the vgObject

      Calculate the offset position behind the vgObject

      Set the position of the vgObserver.

 

* 192 *  How do I follow a vgPlayerup

     

    This a quite straight forward to do, as players were designed to be viewed from.

    You simply need to set your  vgObserver to look from a desired vgPlayer and you can choose 3 methods of following:

     

    • Tethered Fixed: Follow the selected vgPlayer at a given offset
    • Tethered Spin: Follow the selected vgPlayer while orbiting around the vgPlayer
    • Tethered Follow: Follow the selected vgPlayer at a given offset and N-frames behind

     

       For example to set tethered fixed you could do:

       

    Code :

    --

       

      //

      //  Attach the observer to the player and navigator

      //

       

      vgProp( obs, VGCOMMON_ENABLED, VG_ON );

       

       

      //

      // Set The Observer Fixed Tethered state

      //

       

      vgProp( obs, VGOBS_TETHERSTATE, VGOBS_FIXED );

       

       

      //

      // The Observer needs to be relative to a players coords

      //

       

      vgProp( obs, VGOBS_TETHERCOORD, VGOBS_TPLAYER );

       

       

      //

      // We need the player for the navigator assume first player

      //

       

      vgPlayer *plyr = vgGetPlyr( 0 );

       

       

      //

      // Associate the Player with the Observer

      //

       

      vgObservPlyr( obs, plyr );

       

       

     

* 193 *  How to Switch Observer Motion Models up

     

    This is quite straight forward to do, you just have to ensure that you remove any associations with vgNavigator or vgPlayer that the vgObserver may have. See the Code example switchObvserver2MotionModel for further details

     

* 194 *  How can I attached a vgObject to my Viewpoint up


    Placing a vgObject so that it is always in the view point is not too hard.

    One way would be to:
     

    • Create a vgPlayer
    • Add vgObject to the vgPlayer
    • Offset the vgObject in the +Y from the vgPlayer
    • Associate your Motion Model with the vgPlayer
    • Attatch the vgObserver to the vgPlayer (tethered Fixed)

    Then when you move your motion model, the vglPayer and vgObject will automatically be moved for you and stay in your viewpoint at the given position
     

* 195 *  How can I find the number of Parts in a Objectup


    Vega provides a function to return the number of vgParts within an vgObject.

    int numobjs = vgGetNumParts(  vgGetObj(0) );

    Note that this is the number of vgParts and not necessarily the number of nodes also note that the Make Parts property for the vgObject has to be set before the vgObject is loaded or made.

    Also see How to count the number of pfGeoSet's in a vgObject
     

 

* 196 *   What are Isectorsup

     

    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


 

* 197 *   What is an RDF file up

     

    And RDF is a Vega Region Definition File, the RDF file can be used to store the configuration parameters used for configuring the Vega LADBM environment. It is based on the assumption that the database is constructed with tile grids.

    For example, instead of defining a 10x10 tiled database in an ADF as 100 vgObjects, vgRegions, and vgVolumes, RDF leverages the fact that the data has the same basic attributes, and is evenly distributed across a regular grid. Instead of one monolithic ADF, we can have a small ADF and one or more small RDF to describe the data.

     

* 198 *   What does an ADF file look Like up

     

    Heres an example ADF see the next FAQ for details and the LADBM documentation.

     

    //------------------------------------------------------------------------------------------------------------------------------------------------

     

    tilegrid "RHCB" {

        path "$(APPPATH)\data\contour-region-high-culture-bbldgs-fst"

        nameexpr {    format "RHCB.c%03d.r%03d.fst" $col $row }

        radius 50000

        groupid 3

     

       tilelist {

        

        {12 16}  {12 17}  {12 18}  {12 19}  {12 20}

        {12 21}  {12 22}  {12 23}  {12 24}  {12 25}  {12 26}

        {13 10}

        {13 11}  {13 12}  {13 13}  {13 14}  {13 15}  {13 16}  {13 17}  {13 18}  {13 19}  {13 20}

        {13 21}  {13 22}  {13 23}  {13 24}  {13 25}  {13 26}

        {14 10}

        {14 11}  {14 12}  {14 13}  {14 14}  {14 15}  {14 16}  {14 17}  {14 18}  {14 19}  {14 20}

        {14 21}  {14 22}  {14 23}  {14 24}  {14 25}  {14 26}

        {15 10}

        {15 11}  {15 12}  {15 13}  {15 14}  {15 15}  {15 16}  {15 17}  {15 18}  {15 19}  {15 20}

        {15 21}  {15 22}  {15 23}  {15 24}  {15 25}  {15 26}

        {16 10}

        {16 11}  {16 12}  {16 13}  {16 14}  {16 15}  {16 16}  {16 17}  {16 18}  {16 19}  {16 20}

        {16 21}  {16 22}  {16 23}  {16 24}  {16 25}  {16 26}

        {17 10}

        {17 11}  {17 12}  {17 13}  {17 14}  {17 15}  {17 16}  {17 17}  {17 18}  {17 19}  {17 20}

        {17 21}  {17 22}  {17 23}  {17 24}  {17 25}  {17 26}

        {18 10}

        {18 11}  {18 12}  {18 13}  {18 14}  {18 15}  {18 16}  {18 17}  {18 18}  {18 19}  {18 20}

        {18 21}  {18 22}  {18 23}  {18 24}  {18 25}  {18 26}

        {19 10}

        {19 11}  {19 12}  {19 13}  {19 14}  {19 15}  {19 16}  {19 17}  {19 18}  {19 19}  {19 20}

        {19 21}  {19 22}  {19 23}  {19 24}  {19 25}  {19 26}

        {20 10}

        {20 11}  {20 12}  {20 13}  {20 14}  {20 15}  {20 16}  {20 17}  {20 18}  {20 19}  {20 20}

        {20 21}  {20 22}  {20 23}  {20 24}  {20 25}  {20 26}

        {21 10}

        {21 11}  {21 12}  {21 13}  {21 14}  {21 15}  {21 16}  {21 17}  {21 18}  {21 19}  {21 20}

        {21 21}  {21 22}  {21 23}  {21 24}  {21 25}  {21 26}

        {22 10}

        {22 11}  {22 12}  {22 13}  {22 14}  {22 15}  {22 16}  {22 17}  {22 18}  {22 19}  {22 20}

        {22 21}  {22 22}  {22 23}  {22 24}  {22 25}  {22 26}

        {23 10}

        {23 11}  {23 12}  {23 13}  {23 14}  {23 15}  {23 16}  {23 17}  {23 18}  {23 19}  {23 20}

        {23 21}  {23 22}  {23 23}  {23 24}  {23 25}  {23 26}

        {24 10}

        {24 11}  {24 12}  {24 13}  {24 14}  {24 15}  {24 16}  {24 17}  {24 18}  {24 19}  {24 20}

        {24 21}  {24 22}  {24 23}  {24 24}  {24 25}  {24 26}

        {25 10}

        {25 11}  {25 12}  {25 13}  {25 14}  {25 15}  {25 16}  {25 17}  {25 18}  {25 19}  {25 20}

        {25 21}  {25 22}  {25 23}  {25 24}  {25 25}  {25 26}

        {26 10}

        {26 11}  {26 12}  {26 13}  {26 14}  {26 15}  {26 16}  {26 17}  {26 18}  {26 19}  {26 20}

        {26 21}  {26 22}  {26 23}  {26 24}  {26 25}  {26 26}

       }

        numtiles 26 26

        gridorigin -327287.45289023 -471148.8

        gridextent 428149.6232 616345.6//16467.29320x26 23705.60000x24

        rendersphere 0

        immediate 0

        aoicull 1

        isectclass 0x0

        optim 0x10

        sensorizable 0

    }

     

    //------------------------------------------------------------------------------------------------------------------------------------------------

     

* 199 *    What does the content of an RDF file meanup


    RDF Keywords

    char nameexpr [PF_MAXSTRING]

      Specifies a naming expression for the tiles. When evaluating that expression, the loader sets the variables col and row to the column and row values appropriate for that tile. The generated name is used for the tile's vgObject, vgRegion, vgVolume, vgDataSet, and the actual datafile to be loaded. By convention, nameexpr should only specify the basename of the file; pathing should be resolved by searching the Vega pathlist.

     

    int numtiles [2]

      Specifies the number of columns and rows in the tilegrid (which is not the same as the actual number of tiles populating the tilegrid). If no tilelist attribute is defined, then The tile numbering starts from the lower left with tile {0 0}.

      Default value: 1 1

     

    double gridorigin[2]

      Specifies the location of the lower left corner of the tilegrid (i.e. the lower left corner of tile {0 0}) in world (DBU) coordinates.

      Default value: 0. 0.

     

    double gridextent[2]

      Specifies the width and height of the tilegrid in world (DBU)

      coordinates. Default value: 0. 0.

     

    int groupid

      Sets the tiles' vgRegion VGREG_GROUP property. value must be an integer from 0 to 31; see man vgRegion. Default value: 0 It's a good practice to assign an unique group id to each rdf file. This will cause the region paging traversal more efficient and accurate. Also, at the initial traversal, AOI will go through ALL regions, starting from group 0, to figure out the GCS and surrounding regions. If you have many regions defined in many rdf files, then the arrangement of the group id's may affect the initial visual appearance. Here is a guide line: 

      group 0 - low  level terrain tiles

      group 1 - high level terrain tiles

      group 2 - low  level culture features

      group 3 - high level culture features

     

    int aoicull

      Sets the tiles' vgRegion VGREG_AOICULL property. value must be an boolean.

      Default value: 1

     

    float radius

      Sets the radius of tiles' vgVolume. value is in DBUs.

      Default value: 0.

     

    int rendersphere

      Sets the tiles' vgRegion VGREG_VOL_RENDER property. value must be an boolean.

      Default value: 0

     

* 200 *   How to pick a static object usinf vgPicker up

     

    Unfortunately you can only pick Dynamic Objects, this is a design limitation that was built into vgPicker when I originally wrote the code. (DOH)

    There is no straight forward or easy working around for this limitation with Vega and the vgPicker they only solution is than write your own picking code

     

 

 

 

 Copyright 2004-2006 Gordon Tomlinson  All Rights Reserved.

All logos, trademarks and copyrights in this site are property of their respective owner.