本文整理汇总了C++中LLViewerObject::addThisAndAllChildren方法的典型用法代码示例。如果您正苦于以下问题:C++ LLViewerObject::addThisAndAllChildren方法的具体用法?C++ LLViewerObject::addThisAndAllChildren怎么用?C++ LLViewerObject::addThisAndAllChildren使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LLViewerObject
的用法示例。
在下文中一共展示了LLViewerObject::addThisAndAllChildren方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Add
void WavefrontSaver::Add(const LLVOAvatar* av_vo) //adds attachments, too!
{
offset = -av_vo->getRenderPosition();
avatar_joint_list_t vjv = av_vo->mMeshLOD;
for (avatar_joint_list_t::const_iterator itervj = vjv.begin(); itervj != vjv.end(); ++itervj)
{
const LLViewerJoint* vj = dynamic_cast<LLViewerJoint*>(*itervj);
if (!vj || vj->mMeshParts.empty()) continue;
LLViewerJointMesh* vjm = dynamic_cast<LLViewerJointMesh*>(vj->mMeshParts[0]); //highest LOD
if (!vjm) continue;
vjm->updateJointGeometry();
LLFace* face = vjm->mFace;
if (!face) continue;
//Beware: this is a hack because LLFace has multiple LODs
//'pm' supplies the right number of vertices and triangles!
LLPolyMesh* pm = vjm->getMesh();
if (!pm) continue;
LLXform normfix;
normfix.setRotation(pm->getRotation());
//Special case for balls...I mean eyeballs!
static const std::string eyeLname = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::getInstance()->getMeshEntry(LLAvatarAppearanceDefines::MESH_ID_EYEBALL_LEFT)->mName;
static const std::string eyeRname = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::getInstance()->getMeshEntry(LLAvatarAppearanceDefines::MESH_ID_EYEBALL_RIGHT)->mName;
const std::string name = vj->getName();
if (name == eyeLname || name == eyeRname)
{
LLXform lol;
lol.setPosition(-offset);
Add(Wavefront(face, pm, &lol, &normfix));
}
else
Add(Wavefront(face, pm, NULL, &normfix));
}
for (LLVOAvatar::attachment_map_t::const_iterator iter = av_vo->mAttachmentPoints.begin(); iter != av_vo->mAttachmentPoints.end(); ++iter)
{
LLViewerJointAttachment* ja = iter->second;
if (!ja) continue;
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator itero = ja->mAttachedObjects.begin(); itero != ja->mAttachedObjects.end(); ++itero)
{
LLViewerObject* o = *itero;
if (!o) continue;
LLDynamicArray<LLViewerObject*> prims = LLDynamicArray<LLViewerObject*>();
o->addThisAndAllChildren(prims);
for (LLDynamicArray<LLViewerObject*>::iterator iterc = prims.begin(); iterc != prims.end(); ++iterc)
{
const LLViewerObject* c = *iterc;
if (!c) continue;
if (LLSelectNode* n = LLSelectMgr::getInstance()->getSelection()->findNode(const_cast<LLViewerObject*>(c)))
{
}
else continue;
const LLVolume* vol = c->getVolume();
if (!vol) continue;
LLXform v_form;
v_form.setScale(c->getScale());
v_form.setPosition(c->getRenderPosition());
v_form.setRotation(c->getRenderRotation());
LLXform normfix;
normfix.setRotation(v_form.getRotation());
if (c->isHUDAttachment())
{
v_form.addPosition(-offset);
//Normals of HUD elements are funky
//TO-DO: fix 'em!
}
Add(vol, &v_form, &normfix);
}
}
}
}