vtLoadModeluses OSG to import 3D geometry from a file, and returns it as a node which can be added to the scene, and optionally placed on the terrain.
The most commonly useful formats include the following, depending on which extensions DLLs have been built with the library:
- .3ds (3D Studio)
- .dae (Collada)
- .flt (Open Flight)
- .lwo (LightWave)
- .obj (Alias Wavefront)
These five formats have been tested and known to work reasonably well, within the limitations of each format. OSG supports a long list of less-common formats as well.
Another option is to export directly to an OSG-specific format:
- osgexport, an open-source exporter from Blender. It writes the .osg format.
- OSGExp, an open-source exporter from 3DS MAX. It can write either the ASCII .osg format, or the compact .ive binary format.
If you are using Blender, see How to use Blender with OSG/VTP.
First, you will almost certainly want to add your model to the scene graph, by using
addChildto add it to some existing node:
vtGroup *root = vtGetScene().GetRoot();
If you are writing your code in a vtTerrain subclass method (your own terrain), you can alternately use
vtTerrain::AddNodeto add the node to the terrain's scene graph:
NodePtr node = vtLoadModel(...);
To move/scale your model, you can attach it to a transform node:
vtTransform *trans = new vtTransform;
To control placement of your model on the terrain, you can use the
void vtTerrain::PlantModel(vtTransform *model);
void vtTerrain::PlantModelAtPoint(vtTransform *model, const DPoint2 &pos);
PlantModelmethod moves your object vertically such that it lies on the terrain surface,
PlantModelAtPointfirst places the object a specific earth coordinate before planting it down.
There is a 3D modeling package that is popular, and as Free as the VTP - Blender.
Tested this possibility in August 2006: Blender to OSG.