本文整理汇总了C++中osg::BoundingBox::yMin方法的典型用法代码示例。如果您正苦于以下问题:C++ BoundingBox::yMin方法的具体用法?C++ BoundingBox::yMin怎么用?C++ BoundingBox::yMin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osg::BoundingBox
的用法示例。
在下文中一共展示了BoundingBox::yMin方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: init_towbar
inline void init_towbar()
{
body_s_ = findFirstNode((tow_visual_object_)->root(),"body_s");
body_b_ = findFirstNode((tow_visual_object_)->root(),"body_b");
body_a_ = findFirstNode((tow_visual_object_)->root(),"body_a");
osg::ComputeBoundsVisitor cbvs;
body_s_->accept( cbvs );
const osg::BoundingBox bb_s = cbvs.getBoundingBox();
osg::ComputeBoundsVisitor cbvb;
body_b_->accept( cbvb );
const osg::BoundingBox bb_b = cbvb.getBoundingBox();
osg::ComputeBoundsVisitor cbva;
body_a_->accept( cbva );
const osg::BoundingBox bb_a = cbva.getBoundingBox();
osg::ComputeBoundsVisitor cbv;
(tow_visual_object_)->root()->accept( cbv );
const osg::BoundingBox bb_ = cbv.getBoundingBox();
radius_ = abs(bb_.yMax() - bb_.yMin())/2.0;//(*tow_visual_object_)->root()->getBound().radius();
radius_s_ = abs(bb_s.yMax() - bb_s.yMin())/2.0;//body_s_->getBound().radius();
radius_a_ = abs(bb_a.yMax() - bb_a.yMin())/2.0;//body_a_->getBound().radius();
radius_b_ = abs(bb_b.yMax() - bb_b.yMin())/2.0;//body_b_->getBound().radius();
}
示例2: setUseVertexBufferObjects
BboxDrawable::BboxDrawable( const osg::BoundingBox& box, const BBoxSymbol &bboxSymbol ) :
osg::Geometry()
{
setUseVertexBufferObjects(true);
float margin = bboxSymbol.margin().isSet() ? bboxSymbol.margin().value() : 2.f;
osg::Vec3Array* v = new osg::Vec3Array();
if ( bboxSymbol.geom().isSet() && bboxSymbol.geom().value() == BBoxSymbol::GEOM_BOX_ORIENTED )
{
float h = box.yMax() - box.yMin() + 2.f * margin;
v->push_back( osg::Vec3(box.xMax()+margin+h/2.f, box.yMax()+margin-h/2.f, 0) );
}
v->push_back( osg::Vec3(box.xMax()+margin, box.yMax()+margin, 0) );
v->push_back( osg::Vec3(box.xMin()-margin, box.yMax()+margin, 0) );
v->push_back( osg::Vec3(box.xMin()-margin, box.yMin()-margin, 0) );
v->push_back( osg::Vec3(box.xMax()+margin, box.yMin()-margin, 0) );
setVertexArray(v);
if ( v->getVertexBufferObject() )
v->getVertexBufferObject()->setUsage(GL_STATIC_DRAW_ARB);
osg::Vec4Array* c = new osg::Vec4Array();
if ( bboxSymbol.fill().isSet() )
{
c->push_back( bboxSymbol.fill()->color() );
addPrimitiveSet( new osg::DrawArrays(GL_POLYGON, 0, v->getNumElements()) );
}
if ( bboxSymbol.border().isSet() )
{
c->push_back( bboxSymbol.border()->color() );
if ( bboxSymbol.border()->width().isSet() )
getOrCreateStateSet()->setAttribute( new osg::LineWidth( bboxSymbol.border()->width().value() ));
addPrimitiveSet( new osg::DrawArrays(GL_LINE_LOOP, 0, v->getNumElements()) );
}
setColorArray( c );
setColorBinding( osg::Geometry::BIND_PER_PRIMITIVE_SET );
// add the static "isText=true" uniform; this is a hint for the annotation shaders
// if they get installed.
static osg::ref_ptr<osg::Uniform> s_isTextUniform = new osg::Uniform(osg::Uniform::BOOL, AnnotationUtils::UNIFORM_IS_TEXT());
s_isTextUniform->set( false );
getOrCreateStateSet()->addUniform( s_isTextUniform.get() );
// Disable culling since this bounding box will eventually be drawn in screen space.
#if OSG_MIN_VERSION_REQUIRED(3,4,0)
setCullingActive(false);
#endif
}
示例3: computeDivisions
void BuildKdTree::computeDivisions(KdTree::BuildOptions& options)
{
osg::Vec3 dimensions(_bb.xMax()-_bb.xMin(),
_bb.yMax()-_bb.yMin(),
_bb.zMax()-_bb.zMin());
#ifdef VERBOSE_OUTPUT
OSG_NOTICE<<"computeDivisions("<<options._maxNumLevels<<") "<<dimensions<< " { "<<std::endl;
#endif
_axisStack.reserve(options._maxNumLevels);
for(unsigned int level=0; level<options._maxNumLevels; ++level)
{
int axis = 0;
if (dimensions[0]>=dimensions[1])
{
if (dimensions[0]>=dimensions[2]) axis = 0;
else axis = 2;
}
else if (dimensions[1]>=dimensions[2]) axis = 1;
else axis = 2;
_axisStack.push_back(axis);
dimensions[axis] /= 2.0f;
#ifdef VERBOSE_OUTPUT
OSG_NOTICE<<" "<<level<<", "<<dimensions<<", "<<axis<<std::endl;
#endif
}
#ifdef VERBOSE_OUTPUT
OSG_NOTICE<<"}"<<std::endl;
#endif
}
示例4: setUseVertexBufferObjects
BboxDrawable::BboxDrawable( const osg::BoundingBox& box, const BBoxSymbol &bboxSymbol ) :
osg::Geometry()
{
setUseVertexBufferObjects(true);
float margin = bboxSymbol.margin().isSet() ? bboxSymbol.margin().value() : 2.f;
osg::Vec3Array* v = new osg::Vec3Array();
if ( bboxSymbol.geom().isSet() && bboxSymbol.geom().value() == BBoxSymbol::GEOM_BOX_ORIENTED )
{
float h = box.yMax() - box.yMin() + 2.f * margin;
v->push_back( osg::Vec3(box.xMax()+margin+h/2.f, box.yMax()+margin-h/2.f, 0) );
}
v->push_back( osg::Vec3(box.xMax()+margin, box.yMax()+margin, 0) );
v->push_back( osg::Vec3(box.xMin()-margin, box.yMax()+margin, 0) );
v->push_back( osg::Vec3(box.xMin()-margin, box.yMin()-margin, 0) );
v->push_back( osg::Vec3(box.xMax()+margin, box.yMin()-margin, 0) );
setVertexArray(v);
if ( v->getVertexBufferObject() )
v->getVertexBufferObject()->setUsage(GL_STATIC_DRAW_ARB);
osg::Vec4Array* c = new osg::Vec4Array(osg::Array::BIND_PER_PRIMITIVE_SET);
if ( bboxSymbol.fill().isSet() )
{
c->push_back( bboxSymbol.fill()->color() );
osg::DrawElements* de = new osg::DrawElementsUByte(GL_TRIANGLE_STRIP);
de->addElement(0);
de->addElement(1);
de->addElement(3);
de->addElement(2);
addPrimitiveSet(de);
//addPrimitiveSet( new osg::DrawArrays(GL_POLYGON, 0, v->getNumElements()) );
}
if ( bboxSymbol.border().isSet() )
{
c->push_back( bboxSymbol.border()->color() );
if ( bboxSymbol.border()->width().isSet() )
getOrCreateStateSet()->setAttribute( new osg::LineWidth( bboxSymbol.border()->width().value() ));
addPrimitiveSet( new osg::DrawArrays(GL_LINE_LOOP, 0, v->getNumElements()) );
}
setColorArray( c );
// Disable culling since this bounding box will eventually be drawn in screen space.
setCullingActive(false);
}
示例5:
osg::BoundingSphere
TileNode::computeBound() const
{
osg::BoundingSphere bs;
if (_surface.valid())
{
bs = _surface->getBound();
const osg::BoundingBox bbox = _surface->getAlignedBoundingBox();
_tileKeyValue.a() = std::max( (bbox.xMax()-bbox.xMin()), (bbox.yMax()-bbox.yMin()) );
}
return bs;
}
示例6:
CSulGeomBox::CSulGeomBox( const osg::BoundingBox& bb ) :
CSulGeode()
{
m_minX = bb.xMin();
m_maxX = bb.xMax();
m_minY = bb.yMin();
m_maxY = bb.yMax();
m_minZ = bb.zMin();
m_maxZ = bb.zMax();
createDrawable();
}
示例7: sizeUpY
osg::ref_ptr<osg::Geometry> HUDView::createRandNumBackground(osg::BoundingBox bb)
{
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
osg::Vec3 sizeUpY(0, bb.yMax() + bb.yMax() / 2, 0.0);
osg::Vec3 sizeUpYN(0, -bb.yMax() / 2, 0.0);
bb.expandBy(sizeUpY);
bb.expandBy(sizeUpYN);
osg::Vec3 halfExtent((bb.xMax() - bb.xMin()) / 2.0, (bb.yMax() - bb.yMin()) / 2.0f, 0);
float x_length = bb.xMax() - bb.xMin();
float y_length = bb.yMax() - bb.yMin();
vertices->push_back(osg::Vec3(0, y_length, 0) - halfExtent);
vertices->push_back(osg::Vec3(0, 0, 0) - halfExtent);
vertices->push_back(osg::Vec3(x_length, 0, 0) - halfExtent);
vertices->push_back(osg::Vec3(x_length, y_length, 0) - halfExtent);
geom->setVertexArray(vertices);
osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
geom->setNormalArray(normals, osg::Array::BIND_OVERALL);
osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(0.0f, 0.2f, 1.0f, 0.7f));
geom->setColorArray(colors, osg::Array::BIND_OVERALL);
geom->addPrimitiveSet(new osg::DrawArrays(GL_QUADS, 0, 4));
osg::ref_ptr<osg::StateSet> stateset = geom->getOrCreateStateSet();
stateset->setMode(GL_BLEND, osg::StateAttribute::ON);
stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
//stateset->setAttribute(new osg::PolygonOffset(1.0f,1.0f),osg::StateAttribute::ON);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
return geom;
}
示例8: setupClipStateSet
void Style::setupClipStateSet(const osg::BoundingBox& extents, osg::StateSet* stateset)
{
unsigned int clipTextureUnit = 1;
stateset->setAttributeAndModes( new osg::AlphaFunc(osg::AlphaFunc::GREATER, 0.0f), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
stateset->setTextureAttributeAndModes( clipTextureUnit, _clipTexture.get(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
osg::Matrixd matrix = osg::Matrixd::translate(osg::Vec3(-extents.xMin(), -extents.yMin(), -extents.zMin()))*
osg::Matrixd::scale(osg::Vec3(1.0f/(extents.xMax()-extents.xMin()), 1.0f/(extents.yMax()-extents.yMin()), 1.0f));
osg::ref_ptr<osg::TexGen> texgen = new osg::TexGen;
texgen->setPlanesFromMatrix(matrix);
texgen->setMode(osg::TexGen::OBJECT_LINEAR);
stateset->setTextureAttributeAndModes( clipTextureUnit, texgen.get(), osg::StateAttribute::ON);
}
示例9: if
osg::Vec2 Curve::mapTo2D( const osg::Vec3 p, osg::BoundingBox originRect, osg::BoundingBox newRect )
{
if ( originRect.xMin()==originRect.xMax() )
{
newRect.zMin() = newRect.yMin(); newRect.zMax() = newRect.yMax();
newRect.yMin() = newRect.xMin(); newRect.yMax() = newRect.xMax();
newRect.xMin() = 0.0; newRect.xMax() = 0.0;
}
else if ( originRect.yMin()==originRect.yMax() )
{
newRect.zMin() = newRect.yMin(); newRect.zMax() = newRect.yMax();
newRect.yMin() = 0.0; newRect.yMax() = 0.0;
}
osg::Vec3 newPoint = mapTo( p, originRect, newRect );
osg::Vec2 point2D( newPoint.x(), newPoint.y() );
if ( originRect.xMin()==originRect.xMax() ) point2D.set( newPoint.y(), newPoint.z() );
else if ( originRect.yMin()==originRect.yMax() ) point2D.set( newPoint.x(), newPoint.z() );
return point2D;
}
示例10: setMaxMin
void
WriterCompareTriangle::cutscene(int nbVertices,
const osg::BoundingBox& sceneBox)
{
osg::BoundingBox::vec_type length = sceneBox._max - sceneBox._min;
static const unsigned int k = 4;
unsigned int nbVerticesX = (nbVertices * k) / (length.z() * length.y());
unsigned int nbVerticesY = (nbVertices * k) / (length.z() * length.x());
unsigned int nbVerticesZ = (nbVertices * k) / (length.x() * length.y());
setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ);
OSG_DEBUG << "Cutting x by " << nbVerticesX << std::endl
<< "Cutting y by " << nbVerticesY << std::endl
<< "Cutting z by " << nbVerticesZ << std::endl;
osg::BoundingBox::value_type blocX = length.x() / nbVerticesX; //These 3 lines set the size of a box in x, y and z
osg::BoundingBox::value_type blocY = length.y() / nbVerticesY;
osg::BoundingBox::value_type blocZ = length.z() / nbVerticesZ;
boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ);
short yinc = 1;
short xinc = 1;
unsigned int y = 0;
unsigned int x = 0;
for (unsigned int z = 0; z < nbVerticesZ; ++z)
{
while (x < nbVerticesX && x >= 0)
{
while (y < nbVerticesY && y >= 0)
{
osg::BoundingBox::value_type xMin = sceneBox.xMin() + x * blocX;
if (x == 0) //to prevent from mesh with no case
xMin -= 10;
osg::BoundingBox::value_type yMin = sceneBox.yMin() + y * blocY;
if (y == 0) //to prevent from mesh with no case
yMin -= 10;
osg::BoundingBox::value_type zMin = sceneBox.zMin() + z * blocZ;
if (z == 0) //to prevent from mesh with no case
zMin -= 10;
osg::BoundingBox::value_type xMax = sceneBox.xMin() + (x + 1) * blocX;
if (x == nbVerticesX - 1) //to prevent from mesh with no case
xMax += 10;
osg::BoundingBox::value_type yMax = sceneBox.yMin() + (y + 1) * blocY;
if (y == nbVerticesY - 1) //to prevent from mesh with no case
yMax += 10;
osg::BoundingBox::value_type zMax = sceneBox.zMin() + (z + 1) * blocZ;
if (z == nbVerticesZ - 1) //to prevent from mesh with no case
zMax += 10;
boxList.push_back(osg::BoundingBox(xMin, // Add a box to the list
yMin,
zMin,
xMax,
yMax,
zMax));
y += yinc;
}
yinc = -yinc;
y += yinc;
x += xinc;
}
xinc = -xinc;
x += xinc;
}
}
示例11: cutscene
void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sceneBox)
{
osg::BoundingBox::vec_type length = sceneBox._max - sceneBox._min;
static const float k = 1.3f; // Arbitrary constant multiplier for density computation ("simulates" non-uniform point distributions)
// Computes "density" of points, and thus the number of blocks to divide the mesh into
int nbVerticesX = static_cast<int>( (nbVertices * k) / (length.z() * length.y()) );
int nbVerticesY = static_cast<int>( (nbVertices * k) / (length.z() * length.x()) );
int nbVerticesZ = static_cast<int>( (nbVertices * k) / (length.x() * length.y()) );
setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ); // This function prevent from cutting the scene in too many blocs
OSG_INFO
<< "Cutting x by " << nbVerticesX << std::endl
<< "Cutting y by " << nbVerticesY << std::endl
<< "Cutting z by " << nbVerticesZ << std::endl;
osg::BoundingBox::value_type blocX = length.x() / nbVerticesX; // These 3 lines set the size of a bloc in x, y and z
osg::BoundingBox::value_type blocY = length.y() / nbVerticesY;
osg::BoundingBox::value_type blocZ = length.z() / nbVerticesZ;
boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ);
short yinc = 1;
short xinc = 1;
int y = 0;
int x = 0;
for (int z = 0; z < nbVerticesZ; ++z)
{
while (x < nbVerticesX && x >= 0)
{
while (y < nbVerticesY && y >= 0)
{
osg::BoundingBox::value_type xMin = sceneBox.xMin() + x * blocX;
if (x == 0) //to prevent from mesh with no case
xMin -= 10;
osg::BoundingBox::value_type yMin = sceneBox.yMin() + y * blocY;
if (y == 0) //to prevent from mesh with no case
yMin -= 10;
osg::BoundingBox::value_type zMin = sceneBox.zMin() + z * blocZ;
if (z == 0) //to prevent from mesh with no case
zMin -= 10;
osg::BoundingBox::value_type xMax = sceneBox.xMin() + (x + 1) * blocX;
if (x == nbVerticesX - 1) //to prevent from mesh with no case
xMax += 10;
osg::BoundingBox::value_type yMax = sceneBox.yMin() + (y + 1) * blocY;
if (y == nbVerticesY - 1) //to prevent from mesh with no case
yMax += 10;
osg::BoundingBox::value_type zMax = sceneBox.zMin() + (z + 1) * blocZ;
if (z == nbVerticesZ - 1) //to prevent from mesh with no case
zMax += 10;
boxList.push_back(osg::BoundingBox(xMin, // Add a bloc to the list
yMin,
zMin,
xMax,
yMax,
zMax));
y += yinc;
}
yinc = -yinc;
y += yinc;
x += xinc;
}
xinc = -xinc;
x += xinc;
}
}
示例12: intersectAndClip
bool IntersectKdTree::intersectAndClip(osg::Vec3& s, osg::Vec3& e, const osg::BoundingBox& bb) const
{
//return true;
//if (!bb.valid()) return true;
// compate s and e against the xMin to xMax range of bb.
if (s.x()<=e.x())
{
// trivial reject of segment wholely outside.
if (e.x()<bb.xMin()) return false;
if (s.x()>bb.xMax()) return false;
if (s.x()<bb.xMin())
{
// clip s to xMin.
s = s+_d_invX*(bb.xMin()-s.x());
}
if (e.x()>bb.xMax())
{
// clip e to xMax.
e = s+_d_invX*(bb.xMax()-s.x());
}
}
else
{
if (s.x()<bb.xMin()) return false;
if (e.x()>bb.xMax()) return false;
if (e.x()<bb.xMin())
{
// clip s to xMin.
e = s+_d_invX*(bb.xMin()-s.x());
}
if (s.x()>bb.xMax())
{
// clip e to xMax.
s = s+_d_invX*(bb.xMax()-s.x());
}
}
// compate s and e against the yMin to yMax range of bb.
if (s.y()<=e.y())
{
// trivial reject of segment wholely outside.
if (e.y()<bb.yMin()) return false;
if (s.y()>bb.yMax()) return false;
if (s.y()<bb.yMin())
{
// clip s to yMin.
s = s+_d_invY*(bb.yMin()-s.y());
}
if (e.y()>bb.yMax())
{
// clip e to yMax.
e = s+_d_invY*(bb.yMax()-s.y());
}
}
else
{
if (s.y()<bb.yMin()) return false;
if (e.y()>bb.yMax()) return false;
if (e.y()<bb.yMin())
{
// clip s to yMin.
e = s+_d_invY*(bb.yMin()-s.y());
}
if (s.y()>bb.yMax())
{
// clip e to yMax.
s = s+_d_invY*(bb.yMax()-s.y());
}
}
// compate s and e against the zMin to zMax range of bb.
if (s.z()<=e.z())
{
// trivial reject of segment wholely outside.
if (e.z()<bb.zMin()) return false;
if (s.z()>bb.zMax()) return false;
if (s.z()<bb.zMin())
{
// clip s to zMin.
s = s+_d_invZ*(bb.zMin()-s.z());
}
if (e.z()>bb.zMax())
{
// clip e to zMax.
e = s+_d_invZ*(bb.zMax()-s.z());
//.........这里部分代码省略.........