From Ulrich Hertlein, spelling corrections and a few Doxgen comments.

This commit is contained in:
Robert Osfield 2006-02-20 21:05:23 +00:00
parent b0358c698a
commit 7d5c81bf5e
12 changed files with 72 additions and 31 deletions

View File

@ -187,7 +187,7 @@ osg::Node* createModel(bool overlay)
if (overlay) if (overlay)
{ {
osgSim::OverlayNode* overlayNode = new osgSim::OverlayNode; osgSim::OverlayNode* overlayNode = new osgSim::OverlayNode;
overlayNode->setContinousUpdate(true); overlayNode->setContinuousUpdate(true);
overlayNode->setOverlaySubgraph(movingModel); overlayNode->setOverlaySubgraph(movingModel);
overlayNode->addChild(baseModel); overlayNode->addChild(baseModel);
root->addChild(overlayNode); root->addChild(overlayNode);

View File

@ -38,7 +38,7 @@ osg::Node* createRearView(osg::Node* subgraph, const osg::Vec4& clearColour)
// set the view matrix // set the view matrix
camera->setCullingActive(false); camera->setCullingActive(false);
camera->setReferenceFrame(osg::Transform::RELATIVE_RF); camera->setReferenceFrame(osg::Transform::RELATIVE_RF);
camera->setTransformOrder(osg::CameraNode::POST_MULTIPLE); camera->setTransformOrder(osg::CameraNode::POST_MULTIPLY);
camera->setProjectionMatrix(osg::Matrixd::scale(-1.0f,1.0f,1.0f)); camera->setProjectionMatrix(osg::Matrixd::scale(-1.0f,1.0f,1.0f));
camera->setViewMatrix(osg::Matrixd::rotate(osg::inDegrees(180.0f),0.0f,1.0f,0.0f)); camera->setViewMatrix(osg::Matrixd::rotate(osg::inDegrees(180.0f),0.0f,1.0f,0.0f));

View File

@ -85,11 +85,14 @@ class OSG_EXPORT CameraNode : public Transform, public CullSettings
enum TransformOrder enum TransformOrder
{ {
PRE_MULTIPLE, PRE_MULTIPLY,
POST_MULTIPLE POST_MULTIPLY
}; };
/** Set the transformation order for world-to-local and local-to-world transformation.*/
void setTransformOrder(TransformOrder order) { _transformOrder = order; } void setTransformOrder(TransformOrder order) { _transformOrder = order; }
/** Get the transformation order.*/
TransformOrder getTransformOrder() const { return _transformOrder; } TransformOrder getTransformOrder() const { return _transformOrder; }
@ -195,12 +198,16 @@ class OSG_EXPORT CameraNode : public Transform, public CullSettings
SEPERATE_WINDOW SEPERATE_WINDOW
}; };
/** Set the render target.*/
void setRenderTargetImplementation(RenderTargetImplementation impl); void setRenderTargetImplementation(RenderTargetImplementation impl);
/** Set the render target and fall-back that's used if the former isn't available.*/
void setRenderTargetImplementation(RenderTargetImplementation impl, RenderTargetImplementation fallback); void setRenderTargetImplementation(RenderTargetImplementation impl, RenderTargetImplementation fallback);
/** Get the render target.*/
RenderTargetImplementation getRenderTargetImplementation() const { return _renderTargetImplementation; } RenderTargetImplementation getRenderTargetImplementation() const { return _renderTargetImplementation; }
/** Get the render target fallback.*/
RenderTargetImplementation getRenderTargetFallback() const { return _renderTargetFallback; } RenderTargetImplementation getRenderTargetFallback() const { return _renderTargetFallback; }

View File

@ -50,10 +50,10 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
void dirtyOverlayTexture(); void dirtyOverlayTexture();
/** Set whether the OverlayNode should update the overlay texture on every frame.*/ /** Set whether the OverlayNode should update the overlay texture on every frame.*/
void setContinousUpdate(bool update) { _continousUpdate = update; } void setContinuousUpdate(bool update) { _continuousUpdate = update; }
/** Get whether the OverlayNode should update the overlay texture on every frame.*/ /** Get whether the OverlayNode should update the overlay texture on every frame.*/
bool getContinousUpdate() const { return _continousUpdate; } bool getContinuousUpdate() const { return _continuousUpdate; }
/** Set the clear color to use when rendering the overlay subgraph.*/ /** Set the clear color to use when rendering the overlay subgraph.*/
@ -66,7 +66,7 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
void setTexEnvMode(GLenum mode); void setTexEnvMode(GLenum mode);
/** Get the TexEnv mode used to combine the overlay texture with the base color/texture of the OverlayNode's decorate subgraph.*/ /** Get the TexEnv mode used to combine the overlay texture with the base color/texture of the OverlayNode's decorate subgraph.*/
GLenum getTexEnvMode() { return _texEnvMode; } GLenum getTexEnvMode() const { return _texEnvMode; }
/** Set the texture unit that the texture should be assigned to.*/ /** Set the texture unit that the texture should be assigned to.*/
void setOverlayTextureUnit(unsigned int unit); void setOverlayTextureUnit(unsigned int unit);
@ -101,7 +101,7 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
osg::ref_ptr<osg::CameraNode> _camera; osg::ref_ptr<osg::CameraNode> _camera;
// overaly subgraph is render to a texture // overlay subgraph is render to a texture
osg::ref_ptr<osg::Node> _overlaySubgraph; osg::ref_ptr<osg::Node> _overlaySubgraph;
// texgen node to generate the tex coordinates for us // texgen node to generate the tex coordinates for us
@ -116,7 +116,7 @@ class OSGSIM_EXPORT OverlayNode : public osg::Group
unsigned int _textureSizeHint; unsigned int _textureSizeHint;
osg::ref_ptr<osg::Texture2D> _texture; osg::ref_ptr<osg::Texture2D> _texture;
bool _continousUpdate; bool _continuousUpdate;
osg::Polytope _textureFrustum; osg::Polytope _textureFrustum;
}; };

View File

@ -22,6 +22,11 @@
namespace osgSim { namespace osgSim {
/** VisibilityGroup renders (traverses) it's children only when the camera is inside a specified visibility volume.
* The visibility volume is intersected with a line segment that extends from
* the current camera's eye-point along the view vector for a given segment length.
* If an intersection is detected then the node's children are traversed.
*/
class OSGSIM_EXPORT VisibilityGroup : public osg::Group class OSGSIM_EXPORT VisibilityGroup : public osg::Group
{ {
public : public :
@ -35,14 +40,27 @@ class OSGSIM_EXPORT VisibilityGroup : public osg::Group
virtual void traverse(osg::NodeVisitor& nv); virtual void traverse(osg::NodeVisitor& nv);
/** Set the subgraph that is intersected for the visibility determination.*/
void setVisibilityVolume(osg::Node* node) { _visibilityVolume = node; } void setVisibilityVolume(osg::Node* node) { _visibilityVolume = node; }
/** Get the subgraph that is intersected for the visibility determination.*/
osg::Node* getVisibilityVolume() { return _visibilityVolume.get(); } osg::Node* getVisibilityVolume() { return _visibilityVolume.get(); }
/** Get the const subgraph that is intersected for the visibility determination.*/
const osg::Node* getVisibilityVolume() const { return _visibilityVolume.get(); } const osg::Node* getVisibilityVolume() const { return _visibilityVolume.get(); }
/** Set the traversal mask for the intersection testing.*/
void setVolumeIntersectionMask(osg::Node::NodeMask mask) { _volumeIntersectionMask = mask; } void setVolumeIntersectionMask(osg::Node::NodeMask mask) { _volumeIntersectionMask = mask; }
/** Get the traversal mask for the intersection testing.*/
osg::Node::NodeMask getVolumeIntersectionMask() const { return _volumeIntersectionMask; } osg::Node::NodeMask getVolumeIntersectionMask() const { return _volumeIntersectionMask; }
/** Set the length of the intersection segment.
* The segments extends this many database units from the camera eye-point along the look vector.
* If this is left at zero then the diameter of the bounding sphere of the visibility volume is used.*/
void setSegmentLength(float length) { _segmentLength = length; } void setSegmentLength(float length) { _segmentLength = length; }
/** Get the length of the intersection segment.*/
float getSegmentLength() const { return _segmentLength; } float getSegmentLength() const { return _segmentLength; }
protected : protected :

View File

@ -28,7 +28,7 @@
namespace osgUtil { namespace osgUtil {
/** /**
* SceneView is literally a view of a scene, encapsulating the 'camera' * SceneView is literaly a view of a scene, encapsulating the 'camera'
* (not to be confused with Producer::Camera) (modelview+projection matrices), * (not to be confused with Producer::Camera) (modelview+projection matrices),
* global state, lights and the scene itself. Provides * global state, lights and the scene itself. Provides
* methods for setting up the view and rendering it. * methods for setting up the view and rendering it.
@ -122,7 +122,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Referenced, public osg::CullSetting
const osg::Vec4& getClearColor() const { return _camera->getClearColor(); } const osg::Vec4& getClearColor() const { return _camera->getClearColor(); }
/** Mannually set the redraw interlaced stereo stencil mask request flag to control whether to redraw the stencil buffer on the next frame.*/ /** Manually set the redraw interlaced stereo stencil mask request flag to control whether to redraw the stencil buffer on the next frame.*/
void setRedrawInterlacedStereoStencilMask(bool flag) { _redrawInterlacedStereoStencilMask = flag; } void setRedrawInterlacedStereoStencilMask(bool flag) { _redrawInterlacedStereoStencilMask = flag; }
/** Get the redraw interlaced stereo stencil mask request flag.*/ /** Get the redraw interlaced stereo stencil mask request flag.*/
@ -207,7 +207,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Referenced, public osg::CullSetting
/** Get the const projection matrix.*/ /** Get the const projection matrix.*/
const osg::Matrixd& getProjectionMatrix() const { return _camera->getProjectionMatrix(); } const osg::Matrixd& getProjectionMatrix() const { return _camera->getProjectionMatrix(); }
/** Get the othographic settings of the orthographic projection matrix. /** Get the orthographic settings of the orthographic projection matrix.
* Returns false if matrix is not an orthographic matrix, where parameter values are undefined.*/ * Returns false if matrix is not an orthographic matrix, where parameter values are undefined.*/
bool getProjectionMatrixAsOrtho(double& left, double& right, bool getProjectionMatrixAsOrtho(double& left, double& right,
double& bottom, double& top, double& bottom, double& top,

View File

@ -18,7 +18,7 @@ using namespace osg;
CameraNode::CameraNode(): CameraNode::CameraNode():
_clearColor(osg::Vec4(0.0f,0.0f,0.0f,1.0f)), _clearColor(osg::Vec4(0.0f,0.0f,0.0f,1.0f)),
_clearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT), _clearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT),
_transformOrder(PRE_MULTIPLE), _transformOrder(PRE_MULTIPLY),
_renderOrder(POST_RENDER), _renderOrder(POST_RENDER),
_drawBuffer(GL_NONE), _drawBuffer(GL_NONE),
_readBuffer(GL_NONE), _readBuffer(GL_NONE),
@ -236,7 +236,7 @@ bool CameraNode::computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const
{ {
if (_referenceFrame==RELATIVE_RF) if (_referenceFrame==RELATIVE_RF)
{ {
if (_transformOrder==PRE_MULTIPLE) if (_transformOrder==PRE_MULTIPLY)
{ {
matrix.preMult(_viewMatrix); matrix.preMult(_viewMatrix);
} }
@ -258,7 +258,7 @@ bool CameraNode::computeWorldToLocalMatrix(Matrix& matrix,NodeVisitor*) const
if (_referenceFrame==RELATIVE_RF) if (_referenceFrame==RELATIVE_RF)
{ {
if (_transformOrder==PRE_MULTIPLE) if (_transformOrder==PRE_MULTIPLY)
{ {
// note doing inverse so pre becomes post. // note doing inverse so pre becomes post.
matrix.postMult(inverse); matrix.postMult(inverse);

View File

@ -71,8 +71,11 @@ bool CameraNode_readLocalData(Object& obj, Input& fr)
if (fr.matchSequence("transformOrder %w")) if (fr.matchSequence("transformOrder %w"))
{ {
if (fr[1].matchWord("PRE_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::PRE_MULTIPLE); if (fr[1].matchWord("PRE_MULTIPLY")) camera.setTransformOrder(osg::CameraNode::PRE_MULTIPLY);
else if (fr[1].matchWord("POST_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::POST_MULTIPLE); else if (fr[1].matchWord("POST_MULTIPLY")) camera.setTransformOrder(osg::CameraNode::POST_MULTIPLY);
// the following are for backwards compatibility.
else if (fr[1].matchWord("PRE_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::PRE_MULTIPLY);
else if (fr[1].matchWord("POST_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::POST_MULTIPLY);
fr += 2; fr += 2;
iteratorAdvanced = true; iteratorAdvanced = true;
@ -235,8 +238,8 @@ bool CameraNode_writeLocalData(const Object& obj, Output& fw)
fw.indent()<<"transformOrder "; fw.indent()<<"transformOrder ";
switch(camera.getTransformOrder()) switch(camera.getTransformOrder())
{ {
case(osg::CameraNode::PRE_MULTIPLE): fw <<"PRE_MULTIPLE"<<std::endl; break; case(osg::CameraNode::PRE_MULTIPLY): fw <<"PRE_MULTIPLY"<<std::endl; break;
case(osg::CameraNode::POST_MULTIPLE): fw <<"POST_MULTIPLE"<<std::endl; break; case(osg::CameraNode::POST_MULTIPLY): fw <<"POST_MULTIPLY"<<std::endl; break;
} }
writeMatrix(camera.getProjectionMatrix(),fw,"ProjectionMatrix"); writeMatrix(camera.getProjectionMatrix(),fw,"ProjectionMatrix");

View File

@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <string>
#include <osg/Geode> #include <osg/Geode>
#include <osg/Group> #include <osg/Group>
@ -223,6 +224,18 @@ void ReaderWriterPFB::initPerformer()
// } // }
pfdInitConverter(".pfb"); pfdInitConverter(".pfb");
/*
* Tell Performer to look in OSG search path
*/
const osgDB::FilePathList& filePath = osgDB::Registry::instance()->getDataFilePathList();
std::string path = "";
for (unsigned int i = 0; i < filePath.size(); i++) {
if (i != 0)
path += ":";
path += filePath[i];
}
pfFilePath(path.c_str());
pfConfig(); pfConfig();
} }

View File

@ -26,7 +26,7 @@ OverlayNode::OverlayNode():
_texEnvMode(GL_DECAL), _texEnvMode(GL_DECAL),
_textureUnit(1), _textureUnit(1),
_textureSizeHint(1024), _textureSizeHint(1024),
_continousUpdate(false) _continuousUpdate(false)
{ {
init(); init();
} }
@ -37,7 +37,7 @@ OverlayNode::OverlayNode(const OverlayNode& copy, const osg::CopyOp& copyop):
_texEnvMode(copy._texEnvMode), _texEnvMode(copy._texEnvMode),
_textureUnit(copy._textureUnit), _textureUnit(copy._textureUnit),
_textureSizeHint(copy._textureSizeHint), _textureSizeHint(copy._textureSizeHint),
_continousUpdate(copy._continousUpdate) _continuousUpdate(copy._continuousUpdate)
{ {
init(); init();
} }
@ -109,7 +109,7 @@ void OverlayNode::traverse(osg::NodeVisitor& nv)
unsigned int contextID = cv->getState()!=0 ? cv->getState()->getContextID() : 0; unsigned int contextID = cv->getState()!=0 ? cv->getState()->getContextID() : 0;
// if we need to redraw then do cull traversal on camera. // if we need to redraw then do cull traversal on camera.
if (!_textureObjectValidList[contextID] || _continousUpdate) if (!_textureObjectValidList[contextID] || _continuousUpdate)
{ {
// now compute the camera's view and projection matrix to point at the shadower (the camera's children) // now compute the camera's view and projection matrix to point at the shadower (the camera's children)

View File

@ -1081,12 +1081,12 @@ void CullVisitor::apply(osg::CameraNode& camera)
pushProjectionMatrix(createOrReuseMatrix(camera.getProjectionMatrix())); pushProjectionMatrix(createOrReuseMatrix(camera.getProjectionMatrix()));
pushModelViewMatrix(createOrReuseMatrix(camera.getViewMatrix())); pushModelViewMatrix(createOrReuseMatrix(camera.getViewMatrix()));
} }
else if (camera.getTransformOrder()==osg::CameraNode::POST_MULTIPLE) else if (camera.getTransformOrder()==osg::CameraNode::POST_MULTIPLY)
{ {
pushProjectionMatrix(createOrReuseMatrix(getProjectionMatrix()*camera.getProjectionMatrix())); pushProjectionMatrix(createOrReuseMatrix(getProjectionMatrix()*camera.getProjectionMatrix()));
pushModelViewMatrix(createOrReuseMatrix(getModelViewMatrix()*camera.getViewMatrix())); pushModelViewMatrix(createOrReuseMatrix(getModelViewMatrix()*camera.getViewMatrix()));
} }
else // pre multiple else // pre multiply
{ {
pushProjectionMatrix(createOrReuseMatrix(camera.getProjectionMatrix()*getProjectionMatrix())); pushProjectionMatrix(createOrReuseMatrix(camera.getProjectionMatrix()*getProjectionMatrix()));
pushModelViewMatrix(createOrReuseMatrix(camera.getViewMatrix()*getModelViewMatrix())); pushModelViewMatrix(createOrReuseMatrix(camera.getViewMatrix()*getModelViewMatrix()));

View File

@ -812,7 +812,7 @@ void PickVisitor::apply(osg::CameraNode& camera)
camera.getViewMatrix(), camera.getViewMatrix(),
_mx, _my ); _mx, _my );
} }
else if (camera.getTransformOrder()==osg::CameraNode::POST_MULTIPLE) else if (camera.getTransformOrder()==osg::CameraNode::POST_MULTIPLY)
{ {
runNestedPickVisitor( camera, runNestedPickVisitor( camera,
camera.getViewport() ? camera.getViewport() : _lastViewport.get(), camera.getViewport() ? camera.getViewport() : _lastViewport.get(),
@ -820,7 +820,7 @@ void PickVisitor::apply(osg::CameraNode& camera)
_lastViewMatrix * camera.getViewMatrix(), _lastViewMatrix * camera.getViewMatrix(),
_mx, _my ); _mx, _my );
} }
else // PRE_MULTIPLE else // PRE_MULTIPLY
{ {
runNestedPickVisitor( camera, runNestedPickVisitor( camera,
camera.getViewport() ? camera.getViewport() : _lastViewport.get(), camera.getViewport() ? camera.getViewport() : _lastViewport.get(),