This is with the old format meshes and skeletons.
Edit: Looking further, it seems something is going wrong in VertexEle_BI->baseVertexPointerToElement( VertexPtrBI, &pElementBI ); just before.
The full code is this, just standard stuff.
Code: Select all
// Vertex Blend Index (gets mapped to bone index)
const Ogre::VertexElement* VertexEle_BI =
pSubMesh->vertexData->vertexDeclaration->findElementBySemantic( Ogre::VES_BLEND_INDICES );
// get vertex buffer info via the position element
Ogre::HardwareVertexBufferSharedPtr VertexBufBI =
pSubMesh->vertexData->vertexBufferBinding->getBuffer( VertexEle_BI->getSource() );
unsigned char* VertexPtrBI =
static_cast<unsigned char*>( VertexBufBI->lock( Ogre::HardwareBuffer::LockOptions::HBL_NORMAL ) );
int VertSizeBI=VertexBufBI->getVertexSize() ;
unsigned short* pElementBI=NULL ;
for(int nVert=0 ; nVert<nMaxVert ; nVert++)
{
/////////////////////////////////////////////////////////////////
// Bone index of this vert
VertexEle_BI->baseVertexPointerToElement( VertexPtrBI, &pElementBI );
pVertBoneMap[nVert]=pSubMesh->blendIndexToBoneIndexMap[ pElementBI[0] ] ;
/////////////////////////////////////////////////////////////////
// move on to the next vertex
VertexPtrBI+=VertSizeBI ;
}
VertexBufBI->unlock();