本文整理汇总了C++中MatrixTransform::accept方法的典型用法代码示例。如果您正苦于以下问题:C++ MatrixTransform::accept方法的具体用法?C++ MatrixTransform::accept怎么用?C++ MatrixTransform::accept使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MatrixTransform
的用法示例。
在下文中一共展示了MatrixTransform::accept方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: loadOSGModel
MatrixTransform* ChessUtils::loadOSGModel(string name, float modelSize, Material* material, bool overrideMaterial,
Vec3 modelCenterShift, double rotationAngle, Vec3 rotationAxis,
Vec3 modelCenterOffsetPercentage) {
// create a new node by reading in model from file
Node* modelNode = osgDB::readNodeFile(name);
if (modelNode != NULL) {
// apply material
if (material != NULL) {
if (overrideMaterial) {
modelNode->getOrCreateStateSet()->setAttributeAndModes(material, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
} else {
modelNode->getOrCreateStateSet()->setAttributeAndModes(material, osg::StateAttribute::ON);
}
}
//put model in origin
//osg::BoundingSphere bound = modelNode->getBound();
osg::ComputeBoundsVisitor cbVisitorOrigin;
modelNode->accept(cbVisitorOrigin);
osg::BoundingBox bound = cbVisitorOrigin.getBoundingBox();
double scaleRatio = modelSize / bound.radius();
MatrixTransform* unitTransform = new MatrixTransform();
unitTransform->postMult(Matrix::translate(-bound.center().x(), -bound.center().y(), -bound.center().z()));
unitTransform->postMult(Matrix::rotate(rotationAngle, rotationAxis));
unitTransform->postMult(Matrix::scale(scaleRatio, scaleRatio, scaleRatio));
unitTransform->addChild(modelNode);
// put model in specified location
osg::ComputeBoundsVisitor cbVisitor;
unitTransform->accept(cbVisitor);
osg::BoundingBox boundingBox = cbVisitor.getBoundingBox();
float modelXOffset = (boundingBox.xMax() - boundingBox.xMin()) * modelCenterOffsetPercentage.x();
float modelYOffset = (boundingBox.yMax() - boundingBox.yMin()) * modelCenterOffsetPercentage.y();
float modelZOffset = (boundingBox.zMax() - boundingBox.zMin()) * modelCenterOffsetPercentage.z();
unitTransform->postMult(Matrix::translate(modelXOffset, modelYOffset, modelZOffset));
MatrixTransform* modelPositionTransform = new MatrixTransform();
modelPositionTransform->postMult(Matrix::translate(modelCenterShift));
modelPositionTransform->addChild(unitTransform);
return modelPositionTransform;
}
return NULL;
}