Action::ResultE CPUSkinningAlgorithm::intersectEnter(Action *action) { Action::ResultE res = Action::Continue; SkinnedGeometry *skinGeo = getSkin (); Skeleton *skel = getSkeleton(); IntersectAction *iact = boost::polymorphic_downcast<IntersectAction *>(action); CPUSkinningDataAttachmentUnrecPtr data = getCPUSkinningData(skinGeo); if(data == NULL) { data = CPUSkinningDataAttachment::create(); skinGeo->addAttachment(data); } skel->intersectEnter(action, skinGeo); if(data->getDataValid() == false) { transformGeometry(skinGeo, skel, data); data->setDataValid(true); } intersectGeometry(iact, skinGeo, data); return res; }
void operator()(ResourceDatabase* db) { if (stripfy()) setRemoveDoubles(true); std::vector< vl::ref<vl::Geometry> > geom; db->get<Geometry>(geom); for(unsigned int i=0; i<geom.size(); ++i) { if (discardOriginalNormals()) geom[i]->setNormalArray(NULL); if (computeNormals() && !geom[i]->normalArray()) geom[i]->computeNormals(); if (removeDoubles()) DoubleVertexRemover().removeDoubles(geom[i].get()); if (sortVertices()) geom[i]->sortVertices(); if (stripfy()) TriangleStripGenerator().stripfy(geom[i].get(), 22, true, false, true); if (convertToDrawArrays()) geom[i]->convertDrawCallToDrawArrays(); geom[i]->setDisplayListEnabled(useDisplayLists()); geom[i]->setVBOEnabled(useVBOs()); if (transformGeometry()) geom[i]->transform(transformMatrix(),true); } }
Action::ResultE CPUSkinningAlgorithm::renderEnter(Action *action) { Action::ResultE res = Action::Continue; SkinnedGeometry *skinGeo = getSkin (); Skeleton *skel = getSkeleton(); RenderAction *ract = boost::polymorphic_downcast<RenderAction *>(action); OSG_ASSERT(skinGeo != NULL); OSG_ASSERT(skel != NULL); CPUSkinningDataAttachmentUnrecPtr data = getCPUSkinningData(skinGeo); if(data == NULL) { data = CPUSkinningDataAttachment::create(); skinGeo->addAttachment(data); } skel->renderEnter(action, skinGeo); if(data->getDataValid() == false) { transformGeometry(skinGeo, skel, data); data->setDataValid(true); } renderGeometry(ract, skinGeo, data); return res; }
void LuxRenderer::defineGeometry() { for( size_t i = 0; i < this->mtlu_scene->objectList.size(); i++) { mtlu_MayaObject *obj = (mtlu_MayaObject *)this->mtlu_scene->objectList[i]; if( obj->visible ) { if( obj->mobject.hasFn(MFn::kMesh)) { if( isLightMesh(obj)) { logger.debug(MString("Mesh: ")); } if( obj->instanceNumber == 0) { logger.debug(MString("define mesh ") + obj->fullNiceName); //ParamSet triParams = CreateParamSet(); //float r = 0.3; //triParams->AddFloat("radius", &r); //this->lux->objectBegin(obj->fullNiceName.asChar()); //this->lux->shape("sphere", boost::get_pointer(triParams)); //this->lux->objectEnd(); if( this->mtlu_renderGlobals->exportSceneFile) { float r = 0.3; this->luxFile << "ObjectBegin \"" << obj->fullNiceName.asChar() << "\"\n"; this->luxFile << "Shape \"sphere\" \"float radius\" [" << r << "]\n"; this->luxFile << "ObjectEnd\n"; } this->defineTriangleMesh(obj); } bool doMotionblur = this->mtlu_renderGlobals->doMb && (obj->motionBlurred) && (obj->transformMatrices.size() > 1); transformGeometry(obj, doMotionblur); } } } }