本文整理汇总了C++中osg::Vec3f::length方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec3f::length方法的具体用法?C++ Vec3f::length怎么用?C++ Vec3f::length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osg::Vec3f
的用法示例。
在下文中一共展示了Vec3f::length方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calcTranslation
// Convenience function to calculate the translation base on a time and
// direction parameter.
OSG::Vec3f calcTranslation(OSG::Real32 t, OSG::Vec3f dir)
{
// The 'dir' vector encodes direction and velocity
OSG::Real32 v = dir.length();
OSG::Real32 s = v * t;
return(dir * s);
}
示例2: r
bool
ModelData::update()
{
// -- Update bone parameters --
bool anythingChanged = false;
for ( BoneParamsVector::iterator
b = bones.begin(),
bEnd = bones.end() - 1;
b < bEnd; ++b )
{
const CalQuaternion& rotation = b->bone->getRotationBoneSpace();
const CalVector& translation = b->bone->getTranslationBoneSpace();
const CalMatrix& rm = b->bone->getTransformMatrix();
const osg::Matrix3 r( rm.dxdx, rm.dydx, rm.dzdx,
rm.dxdy, rm.dydy, rm.dzdy,
rm.dxdz, rm.dydz, rm.dzdz );
const osg::Vec3f t( translation.x, translation.y, translation.z );
// -- Check for deformed --
b->deformed =
// cal3d reports nonzero translations for non-animated models
// and non zero quaternions (seems like some FP round-off error).
// So we must check for deformations using some epsilon value.
// Problem:
// * It is cal3d that must return correct values, no epsilons
// But nevertheless we use this to reduce CPU load.
t.length() > /*boundingBox.radius() **/ 1e-5 // usually 1e-6 .. 1e-7
||
osg::Vec3d( rotation.x,
rotation.y,
rotation.z ).length() > 1e-6 // usually 1e-7 .. 1e-8
;
// -- Check for changes --
float s = 0;
for ( int j = 0; j < 9; j++ )
{
s += square( r[j] - b->rotation[j] );
}
s += ( t - b->translation ).length2();
if ( s < 1e-7 ) // usually 1e-11..1e-12
{
b->changed = false;
}
else
{
b->changed = true;
anythingChanged = true;
b->rotation = r;
b->translation = t;
}
// std::cout << "bone: " << b->bone->getCoreBone()->getName() << std::endl
// << "quaternion: "
// << rotation.x << ' '
// << rotation.y << ' '
// << rotation.z << ' '
// << rotation.w << std::endl
// << "translation: "
// << t.x() << ' ' << t.y() << ' ' << t.z()
// << "; len = " << t.length()
// << "; s = " << s // << std::endl
// << "; changed = " << b->changed // << std::endl
// << "; deformed = " << b->deformed // << std::endl
// // << "len / bbox.radius = " << translation.length() / boundingBox.radius()
// << std::endl;
}
return anythingChanged;
}
示例3: set_local_end
void Node::set_local_end(const osg::Vec3f& local_end) {
this->local_end = local_end;
length = local_end.length();
length2 = length * length;
}
示例4: main
// Initialize GLUT & OpenSG and set up the scene
int main(int argc, char **argv)
{
// OSG init
OSG::osgInit(argc,argv);
// GLUT init
int winid = setupGLUT(&argc, argv);
// open a new scope, because the pointers below should go out of scope
// before entering glutMainLoop.
// Otherwise OpenSG will complain about objects being alive after shutdown.
{
// the connection between GLUT and OpenSG
OSG::GLUTWindowRefPtr gwin = OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->init();
// load the scene
OSG::NodeRefPtr scene;
if(argc < 2)
{
FWARNING(("No file given!\n"));
FWARNING(("Supported file formats:\n"));
std::list<const char*> suffixes;
OSG::SceneFileHandler::the()->getSuffixList(suffixes, OSG::SceneFileType::OSG_READ_SUPPORTED);
for(std::list<const char*>::iterator it = suffixes.begin();
it != suffixes.end();
++it)
{
FWARNING(("%s\n", *it));
}
scene = OSG::makeTorus(.5, 2, 16, 16);
}
else
{
/*
All scene file loading is handled via the SceneFileHandler.
*/
scene = OSG::SceneFileHandler::the()->read(argv[1]);
}
OSG::commitChanges();
// calc size of the scene
OSG::Vec3f min, max;
OSG::BoxVolume vol;
scene->getWorldVolume(vol);
vol.getBounds(min, max);
OSG::Vec3f d = max - min;
OSG::Real32 offset = d.length() / 2.0f;
// now create a deep clone
OSG::NodeRefPtr sceneClone = OSG::deepCloneTree(scene);
// this clones all nodes but the cores of type Material and Transform are shared.
//NodePtr sceneClone = deepCloneTree(scene, "Material, Transform");
// now change all geometries from the cloned scene just to show
// that it is a real deep copy.
traverse(sceneClone, &changeGeo);
// create a small scene graph with two transformation nodes.
OSG::NodeRefPtr root = OSG::makeCoredNode<OSG::Group>();
OSG::ComponentTransformRefPtr t1;
OSG::NodeRefPtr tn1 =
OSG::makeCoredNode<OSG::ComponentTransform>(&t1);
OSG::ComponentTransformRefPtr t2;
OSG::NodeRefPtr tn2 =
OSG::makeCoredNode<OSG::ComponentTransform>(&t2);
t1->setTranslation(OSG::Vec3f(- offset, 0.0f, 0.0f));
t2->setTranslation(OSG::Vec3f(offset, 0.0f, 0.0f));
tn1->addChild(scene);
tn2->addChild(sceneClone);
root->addChild(tn1);
root->addChild(tn2);
OSG::commitChanges();
// create the SimpleSceneManager helper
mgr = new OSG::SimpleSceneManager;
// tell the manager what to manage
mgr->setWindow(gwin );
mgr->setRoot (root);
// show the whole scene
mgr->showAll();
}
// GLUT main loop
glutMainLoop();
//.........这里部分代码省略.........
示例5: init
//.........这里部分代码省略.........
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(false);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
vp2 = OSG::Viewport::create();
vp2->setCamera ( deco );
vp2->setBackground( bkgnd );
vp2->setRoot ( root );
vp2->setSize ( .5,0,1,1 );
}
else if(stereoMode == 2)
{
OSG::ShearedStereoCameraDecoratorUnrecPtr deco;
// left
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(true);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
OSG::ColorBufferViewportUnrecPtr cvp1 =
OSG::ColorBufferViewport::create();
cvp1->setCamera ( deco );
cvp1->setBackground( bkgnd );
cvp1->setRoot ( root );
cvp1->setSize ( 0,0, 1,1 );
cvp1->setRed(GL_FALSE);
cvp1->setGreen(GL_TRUE);
cvp1->setBlue(GL_TRUE);
cvp1->setAlpha(GL_TRUE);
vp1 = cvp1;
// right
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(false);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
OSG::ColorBufferViewportUnrecPtr cvp2 =
OSG::ColorBufferViewport::create();
cvp2->setCamera ( deco );
cvp2->setBackground( bkgnd );
cvp2->setRoot ( root );
cvp2->setSize ( 0,0,1,1 );
cvp2->setRed(GL_TRUE);
cvp2->setGreen(GL_FALSE);
cvp2->setBlue(GL_FALSE);
cvp2->setAlpha(GL_FALSE);
vp2 = cvp2;
}
GLint glvp[4];
glGetIntegerv( GL_VIEWPORT, glvp );
if(serverx>0 && servery>0)
clusterWindow->setSize( serverx, servery );
else
clusterWindow->setSize( glvp[2], glvp[3] );
clusterWindow->addPort( vp1 );
if(multiport || stereoMode > 0)
clusterWindow->addPort( vp2 );
if(serviceInterfaceValid == true)
{
clusterWindow->setServiceInterface(serviceInterface);
fprintf(stderr, "tcclient use if %s\n", serviceInterface.c_str());
}
if(serviceAddressValid == true)
{
clusterWindow->setServiceAddress(serviceAddress);
fprintf(stderr, "tcclient use ba %s\n", serviceAddress.c_str());
}
// tball
OSG::Vec3f pos(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
tball.setMode( OSG::Trackball::OSGObject );
tball.setStartPosition( pos, true );
tball.setSum( true );
tball.setTranslationMode( OSG::Trackball::OSGFree );
tball.setTranslationScale(scale);
tball.setRotationCenter(center);
tball.setTranslationGen(OSG::Trackball::OSGAbsoluteTranslation);
// run...
std::cout << size.length() << std::endl;
cam->setFar (size.length() * 100.0);
cam->setNear(size.length() * 100.0 / 100000.0);
}