{
unsigned short submeshNum = mesh->getNumSubMeshes();
SubMesh *ghm_submesh = mesh->getSubMesh( 0 ); //還沒想好sub mesh的問題,以後再說
Ogre::VertexBufferBinding::VertexBufferBindingMap ghm_VBBM = ghm_submesh->vertexData->vertexBufferBinding->getBindings();
int iPositonIndex = -1;
//find position buffer
for ( int i = 0; i < ghm_submesh->vertexData->vertexDeclaration->getElementCount(); i++)
{
const VertexElement *ghm_VE = ghm_submesh->vertexData->vertexDeclaration->getElement( i );
if ( ghm_VE->getSemantic() == VES_POSITION ) //we are just interested in position
{
//bingo,get it
iPositonIndex = i;
break;
}
}
return false;
size_t vertexbuffersize = vbbm_interator->second->getNumVertices() * vbbm_interator->second->getVertexSize(); //buffer size
BYTE *VertexBuffer = new BYTE[vertexbuffersize]; //build buffer
vbbm_interator->second->readData( 0, vertexbuffersize, VertexBuffer ); //read data
size_t indexbuffersize = ghm_submesh->indexData->indexBuffer->getNumIndexes() * ghm_submesh->indexData->indexBuffer->getIndexSize(); //buffer size
BYTE *IndexBuffer = new BYTE[indexbuffersize]; //build buffer
ghm_submesh->indexData->indexBuffer->readData( 0, indexbuffersize, IndexBuffer ); //read data
NxTriangleMeshDesc terrainDesc;
terrainDesc.numVertices = vbbm_interator->second->getNumVertices();
terrainDesc.numTriangles = ghm_submesh->indexData->indexBuffer->getNumIndexes() / 3;
terrainDesc.pointStrideBytes = sizeof(NxVec3);
if(ghm_submesh->indexData->indexBuffer->getType() == Ogre::HardwareIndexBuffer::IT_16BIT )
{
terrainDesc.triangleStrideBytes = 3*sizeof(NxU16);
}
else
{
terrainDesc.triangleStrideBytes = 3*sizeof(NxU32);
}
terrainDesc.triangles = IndexBuffer;
terrainDesc.flags = NX_MF_16_BIT_INDICES | NX_MF_HARDWARE_MESH ;
terrainDesc.heightFieldVerticalExtent = -1000.0f;
}