From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a02890.html | 1082 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1082 insertions(+) create mode 100644 docs/doxygen/nel/a02890.html (limited to 'docs/doxygen/nel/a02890.html') diff --git a/docs/doxygen/nel/a02890.html b/docs/doxygen/nel/a02890.html new file mode 100644 index 00000000..3eb09714 --- /dev/null +++ b/docs/doxygen/nel/a02890.html @@ -0,0 +1,1082 @@ + + +NeL: NL3D::CMeshMorpher class Reference + + + +
+

NL3D::CMeshMorpher Class Reference

#include <mesh_morpher.h> +

+


Detailed Description

+Utility to blend shapes
Author:
Matthieu 'TrapII' Besson

+Nevrax France

+
Date:
2001
+ +

+ +

+Definition at line 66 of file mesh_morpher.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 CMeshMorpher ()
void init (CVertexBuffer *vbOri, CVertexBuffer *vbDst, IVertexBufferHard *vbDstHrd, bool hasTgSpace)
void initSkinned (CVertexBuffer *vbOri, CVertexBuffer *vbDst, IVertexBufferHard *vbDstHrd, bool hasTgSpace, std::vector< CVector > *vVertices, std::vector< CVector > *vNormals, std::vector< CVector > *vTgSpace, bool bSkinApplied)
void serial (NLMISC::IStream &f) throw (NLMISC::EStream)
void update (std::vector< CAnimatedMorph > *pBSFactor)
void updateRawSkin (CVertexBuffer *vbOri, const NLMISC::CObjectVector< CRawSkinVertex *, false > &vertexRemap, std::vector< CAnimatedMorph > *pBSFactor)
void updateSkinned (std::vector< CAnimatedMorph > *pBSFactor)

Data Fields

std::vector< CBlendShapeBlendShapes

Private Types

enum  TState { OriginalAll = 0, +OriginalVBDst, +Modified + }

Private Attributes

std::vector< uint8_Flags
std::vector< CVector > * _Normals
bool _SkinApplied: 1
std::vector< CVector > * _TgSpace
bool _UseTgSpace: 1
CVertexBuffer_VBDst
IVertexBufferHard_VBDstHrd
CVertexBuffer_VBOri
std::vector< CVector > * _Vertices
+


Member Enumeration Documentation

+

+ + + + +
+ + +
enum NL3D::CMeshMorpher::TState [private] +
+
+ + + + + +
+   + + +

+

Enumeration values:
+ + + + +
OriginalAll  +
OriginalVBDst  +
Modified  +
+
+ +

+Definition at line 68 of file mesh_morpher.h. +

+

00069         {
+00070                 OriginalAll=0,          // The vertex is the same as original into VBDst and VBHard
+00071                 OriginalVBDst,          // The vertex is the same as original into VBDst
+00072                 Modified,                       // Vertex modified
+00073         } TState;
+
+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + +
NL3D::CMeshMorpher::CMeshMorpher  ) 
+
+ + + + + +
+   + + +

+ +

+Definition at line 60 of file mesh_morpher.cpp. +

+References _SkinApplied, _TgSpace, _VBDst, _VBDstHrd, _VBOri, and _Vertices. +

+

00061 {
+00062         _VBOri = NULL;
+00063         _VBDst = NULL;
+00064         _VBDstHrd = NULL;
+00065 
+00066         _Vertices = NULL;
+00067         _Normals = NULL;
+00068         _TgSpace= NULL;
+00069         _SkinApplied= false;
+00070 }
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshMorpher::init CVertexBuffer vbOri,
CVertexBuffer vbDst,
IVertexBufferHard vbDstHrd,
bool  hasTgSpace
+
+ + + + + +
+   + + +

+ +

+Definition at line 73 of file mesh_morpher.cpp. +

+References _UseTgSpace, _VBDst, _VBDstHrd, and _VBOri. +

+Referenced by NL3D::CMeshMRMGeom::render(), and NL3D::CMeshGeom::render(). +

+

00074 {
+00075         _VBOri = vbOri;
+00076         _VBDst = vbDst;
+00077         _VBDstHrd = vbDstHrd;
+00078         _UseTgSpace = hasTgSpace;
+00079 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshMorpher::initSkinned CVertexBuffer vbOri,
CVertexBuffer vbDst,
IVertexBufferHard vbDstHrd,
bool  hasTgSpace,
std::vector< CVector > *  vVertices,
std::vector< CVector > *  vNormals,
std::vector< CVector > *  vTgSpace,
bool  bSkinApplied
+
+ + + + + +
+   + + +

+ +

+Definition at line 82 of file mesh_morpher.cpp. +

+References _SkinApplied, _TgSpace, _UseTgSpace, _VBDst, _VBDstHrd, _VBOri, and _Vertices. +

+Referenced by NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CMeshMRMGeom::renderSkin(), and NL3D::CMeshGeom::renderSkin(). +

+

00090 {
+00091         _VBOri = vbOri;
+00092         _VBDst = vbDst;
+00093         _VBDstHrd = vbDstHrd;
+00094         _UseTgSpace = hasTgSpace;
+00095 
+00096         _Vertices = vVertices;
+00097         _Normals = vNormals;
+00098         _TgSpace = vTgSpace;
+00099         _SkinApplied = bSkinApplied;
+00100 }
+
+

+ + + + +
+ + + + + + + + + + +
void NL3D::CMeshMorpher::serial NLMISC::IStream f  )  throw (NLMISC::EStream)
+
+ + + + + +
+   + + +

+ +

+Definition at line 386 of file mesh_morpher.cpp. +

+

00387 {
+00388         (void)f.serialVersion (0);
+00389 
+00390         f.serialCont (BlendShapes);
+00391 }
+
+

+ + + + +
+ + + + + + + + + + +
void NL3D::CMeshMorpher::update std::vector< CAnimatedMorph > *  pBSFactor  ) 
+
+ + + + + +
+   + + +

+ +

+Definition at line 103 of file mesh_morpher.cpp. +

+References _UseTgSpace, _VBDst, _VBDstHrd, _VBOri, NLMISC::CRGBAF::A, NLMISC::CRGBAF::B, NLMISC::clamp(), NL3D::CBlendShape::deltaCol, NL3D::CBlendShape::deltaNorm, NL3D::CBlendShape::deltaPos, NL3D::CBlendShape::deltaTgSpace, NL3D::CBlendShape::deltaUV, NLMISC::CRGBAF::G, NL3D::CVertexBuffer::getColorPointer(), NL3D::CVertexBuffer::getNormalCoordPointer(), NL3D::CVertexBuffer::getNumTexCoordUsed(), NL3D::CVertexBuffer::getNumVertices(), NL3D::CVertexBuffer::getTexCoordPointer(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CVertexBuffer::getVertexFormat(), NL3D::CVertexBuffer::getVertexSize(), NL3D::IVertexBufferHard::lock(), Modified, nlassert, OriginalAll, OriginalVBDst, NLMISC::CRGBAF::R, uint, uint32, uint8, NL3D::IVertexBufferHard::unlock(), and NL3D::CBlendShape::VertRefs. +

+Referenced by NL3D::CMeshMRMGeom::render(), and NL3D::CMeshGeom::render(). +

+

00104 {
+00105         uint32 i, j;
+00106 
+00107         if (_VBOri == NULL)
+00108                 return;
+00109         if (BlendShapes.size() == 0)
+00110                 return;
+00111 
+00112         if (_VBOri->getNumVertices() != _VBDst->getNumVertices())
+00113         {       // Because the original vertex buffer is not initialized by default
+00114                 // we must init it here (if there are some blendshapes)
+00115                 *_VBOri = *_VBDst;
+00116         }
+00117 
+00118         // Does the flags are reserved ?
+00119         if (_Flags.size() != _VBOri->getNumVertices())
+00120         {
+00121                 _Flags.resize (_VBOri->getNumVertices());
+00122                 for (i = 0; i < _Flags.size(); ++i)
+00123                         _Flags[i] = Modified; // Modified to update all
+00124         }
+00125 
+00126         nlassert(_VBOri->getVertexFormat() == _VBDst->getVertexFormat());
+00127 
+00128         // Cleaning with original vertex buffer
+00129         uint32 VBVertexSize = _VBOri->getVertexSize();
+00130         uint8 *pOri = (uint8*)_VBOri->getVertexCoordPointer ();
+00131         uint8 *pDst = (uint8*)_VBDst->getVertexCoordPointer ();
+00132         
+00133         for (i= 0; i < _Flags.size(); ++i)
+00134         if (_Flags[i] >= Modified)
+00135         {
+00136                 _Flags[i] = OriginalVBDst;
+00137 
+00138                 for(j = 0; j < VBVertexSize; ++j)
+00139                         pDst[j+i*VBVertexSize] = pOri[j+i*VBVertexSize];
+00140         }
+00141 
+00142         uint tgSpaceStage = 0;
+00143         if (_UseTgSpace)
+00144         {
+00145                 tgSpaceStage = _VBDst->getNumTexCoordUsed() - 1;
+00146         }
+00147 
+00148         // Blending with blendshape
+00149         for (i = 0; i < BlendShapes.size(); ++i)
+00150         {
+00151                 CBlendShape &rBS = BlendShapes[i];
+00152                 float rFactor = pBSFactor->operator[](i).getFactor()/100.0f;
+00153 
+00154                 // todo hulud check it works
+00155                 // if (rFactor > 0.0f)
+00156                 if (rFactor != 0.0f)
+00157                 for (j = 0; j < rBS.VertRefs.size(); ++j)
+00158                 {
+00159                         uint32 vp = rBS.VertRefs[j];
+00160 
+00161                         // Modify Pos/Norm/TgSpace.
+00162                         //------------
+00163                         if (_VBDst->getVertexFormat() & CVertexBuffer::PositionFlag)
+00164                         if (rBS.deltaPos.size() > 0)
+00165                         {
+00166                                 CVector *pV = (CVector*)_VBDst->getVertexCoordPointer (vp);
+00167                                 *pV += rBS.deltaPos[j] * rFactor;
+00168                         }
+00169 
+00170                         if (_VBDst->getVertexFormat() & CVertexBuffer::NormalFlag)
+00171                         if (rBS.deltaNorm.size() > 0)
+00172                         {
+00173                                 CVector *pV = (CVector*)_VBDst->getNormalCoordPointer (vp);
+00174                                 *pV += rBS.deltaNorm[j] * rFactor;
+00175                         }
+00176 
+00177                         if (_UseTgSpace)
+00178                         if (rBS.deltaTgSpace.size() > 0)
+00179                         {
+00180                                 CVector *pV = (CVector*)_VBDst->getTexCoordPointer (vp, tgSpaceStage);
+00181                                 *pV += rBS.deltaTgSpace[j] * rFactor;
+00182                         }
+00183 
+00184                         // Modify UV0 / Color
+00185                         //------------
+00186                         if (_VBDst->getVertexFormat() & CVertexBuffer::TexCoord0Flag)
+00187                         if (rBS.deltaUV.size() > 0)
+00188                         {
+00189                                 CUV *pUV = (CUV*)_VBDst->getTexCoordPointer (vp);
+00190                                 *pUV += rBS.deltaUV[j] * rFactor;
+00191                         }
+00192 
+00193                         if (_VBDst->getVertexFormat() & CVertexBuffer::PrimaryColorFlag)
+00194                         if (rBS.deltaCol.size() > 0)
+00195                         {
+00196                                 CRGBA *pRGBA = (CRGBA*)_VBDst->getColorPointer (vp);
+00197                                 CRGBAF rgbf(*pRGBA);
+00198                                 rgbf.R += rBS.deltaCol[j].R * rFactor;
+00199                                 rgbf.G += rBS.deltaCol[j].G * rFactor;
+00200                                 rgbf.B += rBS.deltaCol[j].B * rFactor;
+00201                                 rgbf.A += rBS.deltaCol[j].A * rFactor;
+00202                                 clamp(rgbf.R, 0.0f, 1.0f);
+00203                                 clamp(rgbf.G, 0.0f, 1.0f);
+00204                                 clamp(rgbf.B, 0.0f, 1.0f);
+00205                                 clamp(rgbf.A, 0.0f, 1.0f);
+00206                                 *pRGBA = rgbf;
+00207                         }
+00208 
+00209                         // Modified
+00210                         _Flags[vp] = Modified;
+00211                 }
+00212         }
+00213 
+00214         // Copying to hardware vertex buffer if some
+00215         if (_VBDstHrd != NULL)
+00216         {
+00217                 uint8 *pDstHrd = (uint8*)_VBDstHrd->lock();
+00218                 for (i = 0; i < _Flags.size(); ++i)
+00219                 {
+00220                         if (_Flags[i] != OriginalAll) // Not OriginalAll ?
+00221                         {
+00222                                 for(j = 0; j < VBVertexSize; ++j)
+00223                                         pDstHrd[j+i*VBVertexSize] = pDst[j+i*VBVertexSize];
+00224                         }
+00225                         // if this vertex is original in the VBDst
+00226                         if (_Flags[i] == OriginalVBDst)
+00227                                 // then it is now copied into the VBHard
+00228                                 _Flags[i] = OriginalAll;
+00229                 }
+00230                 _VBDstHrd->unlock();
+00231         }
+00232 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CMeshMorpher::updateRawSkin CVertexBuffer vbOri,
const NLMISC::CObjectVector< CRawSkinVertex *, false > &  vertexRemap,
std::vector< CAnimatedMorph > *  pBSFactor
+
+ + + + + +
+   + + +

+ +

+Definition at line 399 of file mesh_morpher.cpp. +

+References NL3D::CBlendShape::deltaNorm, NL3D::CBlendShape::deltaPos, NL3D::CBlendShape::deltaUV, NL3D::CVertexBuffer::getNormalOff(), NL3D::CVertexBuffer::getNumVertices(), NLMISC::CObjectVector< T, EnableObjectBehavior >::getPtr(), NL3D::CVertexBuffer::getTexCoordOff(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CVertexBuffer::getVertexFormat(), NL3D::CVertexBuffer::getVertexSize(), NL3D_RAWSKIN_NORMAL_OFF, NL3D_RAWSKIN_UV_OFF, NL3D_RAWSKIN_VERTEX_SIZE, nlassert, NL3D::CRawSkinVertex::Normal, NL3D::CRawSkinVertex::Pos, uint, uint32, uint8, NL3D::CRawSkinVertex::UV, and NL3D::CBlendShape::VertRefs. +

+Referenced by NL3D::CMeshMRMGeom::renderSkinGroupGeom(). +

+

00402 {
+00403         uint32 i, j;
+00404 
+00405         if (vbOri == NULL)
+00406                 return;
+00407         if (BlendShapes.size() == 0)
+00408                 return;
+00409 
+00410         nlassert(vbOri->getVertexFormat() == (CVertexBuffer::PositionFlag | CVertexBuffer::NormalFlag |CVertexBuffer::TexCoord0Flag) );
+00411         nlassert(NL3D_RAWSKIN_VERTEX_SIZE == vbOri->getVertexSize());
+00412         nlassert(NL3D_RAWSKIN_NORMAL_OFF == vbOri->getNormalOff());
+00413         nlassert(NL3D_RAWSKIN_UV_OFF == vbOri->getTexCoordOff(0));
+00414         
+00415         // Cleaning with original vertex buffer
+00416         uint8                   *pOri = (uint8*)vbOri->getVertexCoordPointer ();
+00417         CRawSkinVertex  **vRemap= vertexRemap.getPtr();
+00418         uint                    numVertices= vbOri->getNumVertices();
+00419         
+00420         // Update only the vertices of this lod
+00421         for (i= 0; i < numVertices; ++i)
+00422         {
+00423                 if(*vRemap)
+00424                 {
+00425                         (*vRemap)->Pos= *(CVector*)(pOri);
+00426                         (*vRemap)->Normal= *(CVector*)(pOri + NL3D_RAWSKIN_NORMAL_OFF);
+00427                         (*vRemap)->UV= *(CUV*)(pOri + NL3D_RAWSKIN_UV_OFF);
+00428                 }
+00429                 pOri+= NL3D_RAWSKIN_VERTEX_SIZE;
+00430                 vRemap++;
+00431         }
+00432 
+00433         // Blending with blendshape
+00434         for (i = 0; i < BlendShapes.size(); ++i)
+00435         {
+00436                 CBlendShape             &rBS = BlendShapes[i];
+00437                 float                   rFactor = pBSFactor->operator[](i).getFactor();
+00438 
+00439                 if (rFactor != 0.0f)
+00440                 {
+00441                         rFactor*= 0.01f;
+00442                         uint32          numVertices= rBS.VertRefs.size();
+00443                         // don't know why, but cases happen where deltaNorm not empty while deltaPos is 
+00444                         bool            hasPos= rBS.deltaPos.size()>0;
+00445                         bool            hasNorm= rBS.deltaNorm.size()>0;
+00446                         bool            hasUV= rBS.deltaUV.size()>0;
+00447                         for (j = 0; j < numVertices; ++j)
+00448                         {
+00449                                 // Get the vertex Index in the VBufferFinal
+00450                                 uint    vid= rBS.VertRefs[j];
+00451                                 // Then get the RawSkin vertex to modify 
+00452                                 CRawSkinVertex  *rsVert= vertexRemap[vid];
+00453 
+00454                                 // If exist in this Lod RawSkin, apply
+00455                                 if(rsVert)
+00456                                 {
+00457                                         if(hasPos)
+00458                                                 rsVert->Pos+= rBS.deltaPos[j] * rFactor;
+00459                                         if(hasNorm)
+00460                                                 rsVert->Normal+= rBS.deltaNorm[j] * rFactor;
+00461                                         if(hasUV)
+00462                                                 rsVert->UV+= rBS.deltaUV[j] * rFactor;
+00463                                 }
+00464                         }
+00465                 }
+00466 
+00467         }
+00468 
+00469 }
+
+

+ + + + +
+ + + + + + + + + + +
void NL3D::CMeshMorpher::updateSkinned std::vector< CAnimatedMorph > *  pBSFactor  ) 
+
+ + + + + +
+   + + +

+ +

+Definition at line 236 of file mesh_morpher.cpp. +

+References _SkinApplied, _TgSpace, _UseTgSpace, _VBDst, _VBDstHrd, _VBOri, _Vertices, NLMISC::CRGBAF::A, NLMISC::CRGBAF::B, NLMISC::clamp(), NL3D::CBlendShape::deltaCol, NL3D::CBlendShape::deltaNorm, NL3D::CBlendShape::deltaPos, NL3D::CBlendShape::deltaTgSpace, NL3D::CBlendShape::deltaUV, NLMISC::CRGBAF::G, NL3D::CVertexBuffer::getColorPointer(), NL3D::CVertexBuffer::getNumTexCoordUsed(), NL3D::CVertexBuffer::getNumVertices(), NL3D::CVertexBuffer::getTexCoordOff(), NL3D::CVertexBuffer::getTexCoordPointer(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CVertexBuffer::getVertexFormat(), NL3D::CVertexBuffer::getVertexSize(), NL3D::IVertexBufferHard::lock(), Modified, nlassert, OriginalAll, OriginalVBDst, NLMISC::CRGBAF::R, uint, uint32, uint8, NL3D::IVertexBufferHard::unlock(), and NL3D::CBlendShape::VertRefs. +

+Referenced by NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CMeshMRMGeom::renderSkin(), and NL3D::CMeshGeom::renderSkin(). +

+

00237 {
+00238         uint32 i, j;
+00239 
+00240         if (_VBOri == NULL)
+00241                 return;
+00242         if (BlendShapes.size() == 0)
+00243                 return;
+00244 
+00245         if (_VBOri->getNumVertices() != _VBDst->getNumVertices())
+00246         {       // Because the original vertex buffer is not initialized by default
+00247                 // we must init it here (if there are some blendshapes)
+00248                 *_VBOri = *_VBDst;
+00249         }
+00250 
+00251         // Does the flags are reserved ?
+00252         if (_Flags.size() != _VBOri->getNumVertices())
+00253         {
+00254                 _Flags.resize (_VBOri->getNumVertices());
+00255                 for (i = 0; i < _Flags.size(); ++i)
+00256                         _Flags[i] = Modified; // Modified to update all
+00257         }
+00258 
+00259         nlassert(_VBOri->getVertexFormat() == _VBDst->getVertexFormat());
+00260 
+00261         uint tgSpaceStage;
+00262         uint tgSpaceOff = 0;
+00263         if (_UseTgSpace && _TgSpace)
+00264         {
+00265                 tgSpaceStage = _VBDst->getNumTexCoordUsed() - 1;
+00266                 tgSpaceOff = _VBDst->getTexCoordOff(tgSpaceStage);
+00267         }
+00268 
+00269         // Cleaning with original vertex buffer
+00270         uint32 VBVertexSize = _VBOri->getVertexSize();
+00271         uint8 *pOri = (uint8*)_VBOri->getVertexCoordPointer ();
+00272         uint8 *pDst = (uint8*)_VBDst->getVertexCoordPointer ();
+00273         
+00274         for (i= 0; i < _Flags.size(); ++i)
+00275         if (_Flags[i] >= Modified)
+00276         {
+00277                 for(j = 0; j < VBVertexSize; ++j)
+00278                         pDst[j+i*VBVertexSize] = pOri[j+i*VBVertexSize];
+00279                 
+00280                 if (_Vertices != NULL)
+00281                         _Vertices->operator[](i) = ((CVector*)(pOri+i*VBVertexSize))[0];
+00282 
+00283                 if (_Normals != NULL)
+00284                         _Normals->operator[](i) = ((CVector*)(pOri+i*VBVertexSize))[1];
+00285 
+00286                 if (_TgSpace != NULL)
+00287                         (*_TgSpace)[i] = * (CVector*)(pOri + i * VBVertexSize + tgSpaceOff);
+00288                         
+00289                 _Flags[i] = OriginalVBDst;
+00290         }
+00291 
+00292         // Blending with blendshape
+00293         for (i = 0; i < BlendShapes.size(); ++i)
+00294         {
+00295                 CBlendShape &rBS = BlendShapes[i];
+00296                 float rFactor = pBSFactor->operator[](i).getFactor()/100.0f;
+00297 
+00298                 if (rFactor != 0.0f)
+00299                 for (j = 0; j < rBS.VertRefs.size(); ++j)
+00300                 {
+00301                         uint32 vp = rBS.VertRefs[j];
+00302 
+00303                         // Modify Pos/Norm/TgSpace.
+00304                         //------------
+00305                         if (_Vertices != NULL)
+00306                         if (rBS.deltaPos.size() > 0)
+00307                         {
+00308                                 CVector *pV = &(_Vertices->operator[](vp));
+00309                                 *pV += rBS.deltaPos[j] * rFactor;
+00310                         }
+00311 
+00312                         if (_Normals != NULL)
+00313                         if (rBS.deltaNorm.size() > 0)
+00314                         {
+00315                                 CVector *pV = &(_Normals->operator[](vp));
+00316                                 *pV += rBS.deltaNorm[j] * rFactor;
+00317                         }
+00318 
+00319                         if (_UseTgSpace && _TgSpace != NULL)
+00320                         if (rBS.deltaTgSpace.size() > 0)
+00321                         {
+00322                                 CVector *pV = &((*_TgSpace)[vp]);
+00323                                 *pV += rBS.deltaTgSpace[j] * rFactor;
+00324                         }
+00325 
+00326                         // Modify UV0 / Color
+00327                         //------------
+00328                         if (_VBDst->getVertexFormat() & CVertexBuffer::TexCoord0Flag)
+00329                         if (rBS.deltaUV.size() > 0)
+00330                         {
+00331                                 CUV *pUV = (CUV*)_VBDst->getTexCoordPointer (vp);
+00332                                 *pUV += rBS.deltaUV[j] * rFactor;
+00333                         }
+00334 
+00335                         if (_VBDst->getVertexFormat() & CVertexBuffer::PrimaryColorFlag)
+00336                         if (rBS.deltaCol.size() > 0)
+00337                         {
+00338                                 CRGBA *pRGBA = (CRGBA*)_VBDst->getColorPointer (vp);
+00339                                 CRGBAF rgbf(*pRGBA);
+00340                                 rgbf.R += rBS.deltaCol[j].R * rFactor;
+00341                                 rgbf.G += rBS.deltaCol[j].G * rFactor;
+00342                                 rgbf.B += rBS.deltaCol[j].B * rFactor;
+00343                                 rgbf.A += rBS.deltaCol[j].A * rFactor;
+00344                                 clamp(rgbf.R, 0.0f, 1.0f);
+00345                                 clamp(rgbf.G, 0.0f, 1.0f);
+00346                                 clamp(rgbf.B, 0.0f, 1.0f);
+00347                                 clamp(rgbf.A, 0.0f, 1.0f);
+00348                                 *pRGBA = rgbf;
+00349                         }
+00350 
+00351                         // Modified
+00352                         _Flags[vp] = Modified;
+00353                 }
+00354         }
+00355 
+00356         // Do some transfert to the VBHard if exist.
+00357         if (_VBDstHrd != NULL)
+00358         {
+00359                 // lock.
+00360                 uint8 *pDstHrd = (uint8*)_VBDstHrd->lock();
+00361 
+00362                 // If the skin is applied we have nothing to do 
+00363                 // Because the skinning will transfert ALL the vertices of interest
+00364                 if (!_SkinApplied) 
+00365                 {
+00366                         for (i = 0; i < _Flags.size(); ++i)
+00367                         {
+00368                                 if (_Flags[i] != OriginalAll) // Not OriginalAll ?
+00369                                 {
+00370                                         // We must write the whole vertex because the skinning may not copy 
+00371                                         // vertex and normal changes into VBHard
+00372                                         for(j = 0; j < VBVertexSize; ++j)
+00373                                                 pDstHrd[j+i*VBVertexSize] = pDst[j+i*VBVertexSize];
+00374                                 }
+00375                                 if (_Flags[i] == OriginalVBDst) // OriginalVBDst ?
+00376                                         _Flags[i] = OriginalAll; // So OriginalAll !
+00377                         }
+00378                 }
+00379 
+00380                 // unlock.
+00381                 _VBDstHrd->unlock();
+00382         }
+00383 }
+
+


Field Documentation

+

+ + + + +
+ + +
std::vector<uint8> NL3D::CMeshMorpher::_Flags [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 115 of file mesh_morpher.h.

+

+ + + + +
+ + +
std::vector<CVector>* NL3D::CMeshMorpher::_Normals [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 108 of file mesh_morpher.h.

+

+ + + + +
+ + +
bool NL3D::CMeshMorpher::_SkinApplied [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 112 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), initSkinned(), and updateSkinned().

+

+ + + + +
+ + +
std::vector<CVector>* NL3D::CMeshMorpher::_TgSpace [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 109 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), initSkinned(), and updateSkinned().

+

+ + + + +
+ + +
bool NL3D::CMeshMorpher::_UseTgSpace [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 113 of file mesh_morpher.h. +

+Referenced by init(), initSkinned(), update(), and updateSkinned().

+

+ + + + +
+ + +
CVertexBuffer* NL3D::CMeshMorpher::_VBDst [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 104 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), init(), initSkinned(), update(), and updateSkinned().

+

+ + + + +
+ + +
IVertexBufferHard* NL3D::CMeshMorpher::_VBDstHrd [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 105 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), init(), initSkinned(), update(), and updateSkinned().

+

+ + + + +
+ + +
CVertexBuffer* NL3D::CMeshMorpher::_VBOri [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 103 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), init(), initSkinned(), update(), and updateSkinned().

+

+ + + + +
+ + +
std::vector<CVector>* NL3D::CMeshMorpher::_Vertices [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 107 of file mesh_morpher.h. +

+Referenced by CMeshMorpher(), initSkinned(), and updateSkinned().

+

+ + + + +
+ + +
std::vector<CBlendShape> NL3D::CMeshMorpher::BlendShapes +
+
+ + + + + +
+   + + +

+ +

+Definition at line 77 of file mesh_morpher.h. +

+Referenced by NL3D::CMeshMRMGeom::build(), NL3D::CMeshGeom::build(), NL3D::CMeshMRMGeom::compileRunTime(), NL3D::CMeshGeom::compileRunTime(), NL3D::CMeshMRMGeom::getNbBlendShapes(), NL3D::CMeshGeom::getNbBlendShapes(), NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CMeshMRMGeom::renderSkin(), NL3D::CMeshGeom::renderSkin(), NL3D::CMeshMRMGeom::renderSkinGroupGeom(), NL3D::CMeshGeom::setBlendShapes(), NL3D::CMeshMRMGeom::updateRawSkinNormal(), NL3D::CMeshMRMGeom::updateVertexBufferHard(), and NL3D::CMeshGeom::updateVertexBufferHard().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 06:52:43 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1