00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_MESH_MORPHER_H
00027 #define NL_MESH_MORPHER_H
00028
00029 #include "3d/animated_morph.h"
00030 #include "nel/misc/types_nl.h"
00031 #include "nel/misc/uv.h"
00032 #include <vector>
00033
00034 namespace NL3D
00035 {
00036
00037 class CVertexBuffer;
00038 class IVertexBufferHard;
00039
00040
00041 class CBlendShape
00042 {
00043 public:
00044 std::string Name;
00045
00046 std::vector<NLMISC::CVector> deltaPos;
00047 std::vector<NLMISC::CVector> deltaNorm;
00048 std::vector<NLMISC::CVector> deltaTgSpace;
00049 std::vector<NLMISC::CUV> deltaUV;
00050 std::vector<NLMISC::CRGBAF> deltaCol;
00051
00052 std::vector<uint32> VertRefs;
00053
00054 void serial (NLMISC::IStream &f) throw(NLMISC::EStream);
00055 };
00056
00057
00064 class CMeshMorpher
00065 {
00066 typedef enum
00067 {
00068 OriginalAll=0,
00069 OriginalVBDst,
00070 Modified,
00071 } TState;
00072
00073 public:
00074
00075 std::vector<CBlendShape> BlendShapes;
00076
00077 CMeshMorpher();
00078
00079 void init (CVertexBuffer *vbOri, CVertexBuffer *vbDst, IVertexBufferHard *vbDstHrd, bool hasTgSpace);
00080 void initSkinned (CVertexBuffer *vbOri,
00081 CVertexBuffer *vbDst,
00082 IVertexBufferHard *vbDstHrd,
00083 bool hasTgSpace,
00084 std::vector<CVector> *vVertices,
00085 std::vector<CVector> *vNormals,
00086 std::vector<CVector> *vTgSpace,
00087 bool bSkinApplied);
00088
00089 void update (std::vector<CAnimatedMorph> *pBSFactor);
00090 void updateSkinned (std::vector<CAnimatedMorph> *pBSFactor);
00091
00092 void serial (NLMISC::IStream &f) throw(NLMISC::EStream);
00093
00094 private:
00095
00096 CVertexBuffer *_VBOri;
00097 CVertexBuffer *_VBDst;
00098 IVertexBufferHard *_VBDstHrd;
00099
00100 std::vector<CVector> *_Vertices;
00101 std::vector<CVector> *_Normals;
00102 std::vector<CVector> *_TgSpace;
00103
00104
00105 bool _SkinApplied : 1;
00106 bool _UseTgSpace : 1;
00107
00108 std::vector<uint8> _Flags;
00109
00110
00111 };
00112
00113 }
00114
00115
00116 #endif // NL_MESH_MORPHER_H
00117
00118