00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "std3d.h"
00027
00028 #include "3d/mesh_instance.h"
00029 #include "3d/mesh.h"
00030 #include "3d/skeleton_model.h"
00031 #include <list>
00032
00033 using namespace std;
00034
00035 namespace NL3D
00036 {
00037
00038
00039 CMeshInstance::CMeshInstance()
00040 {
00041
00042
00043 CTransform::setIsLoadbalancable(false);
00044 }
00045
00046
00047 CMeshInstance::~CMeshInstance()
00048 {
00049
00050 if(_FatherSkeletonModel)
00051 {
00052
00053
00054 _FatherSkeletonModel->detachSkeletonSon(this);
00055 nlassert(_FatherSkeletonModel==NULL);
00056 }
00057 }
00058
00059
00060
00061 void CMeshInstance::registerBasic()
00062 {
00063 CMOT::registerModel(MeshInstanceId, MeshBaseInstanceId, CMeshInstance::creator);
00064 }
00065
00066
00067 void CMeshInstance::setApplySkin(bool state)
00068 {
00069
00070 CMeshBaseInstance::setApplySkin (state);
00071
00072
00073 CMesh *pMesh = NLMISC::safe_cast<CMesh *>((IShape*)Shape);
00074
00075
00076 if (state)
00077 {
00078 pMesh->computeBonesId (_FatherSkeletonModel);
00079 }
00080
00081
00082 pMesh->updateSkeletonUsage(_FatherSkeletonModel, state);
00083 }
00084
00085
00086
00087 const std::vector<sint32> *CMeshInstance::getSkinBoneUsage() const
00088 {
00089
00090 CMesh *pMesh = NLMISC::safe_cast<CMesh *>((IShape*)Shape);
00091
00092
00093 pMesh->computeBonesId (_FatherSkeletonModel);
00094
00095
00096 return &pMesh->getMeshGeom().getSkinBoneUsage();
00097 }
00098
00099
00100
00101 bool CMeshInstance::isSkinnable() const
00102 {
00103 if(Shape==NULL)
00104 return false;
00105
00106
00107 CMesh *pMesh = NLMISC::safe_cast<CMesh *>((IShape*)Shape);
00108
00109
00110 return pMesh->getMeshGeom().isSkinned();
00111 }
00112
00113
00114
00115 void CMeshInstance::renderSkin(float alphaMRM)
00116 {
00117
00118
00119 if(Shape && getVisibility() != CHrcTrav::Hide)
00120 {
00121
00122 CMesh *pMesh = NLMISC::safe_cast<CMesh *>((IShape*)Shape);
00123
00124
00125 CMeshGeom &meshGeom= const_cast<CMeshGeom&>(pMesh->getMeshGeom ());
00126 meshGeom.renderSkin( this, alphaMRM );
00127 }
00128 }
00129
00130
00131 }