I declare a NxMeshData called receiveBuffers to receive some information about cloth, but checkValid() function always tell me that my NxMeshData is wrong. what problem in my code?
there is my code:
void createLeaf(int InPos, NxSceneDesc sceneDesc,NxVec3 position)
{
NxClothMeshDesc meshDesc;
meshDesc.setToDefault();
//Fill the geometry
meshDesc.numVertices = NbVertex;
meshDesc.numTriangles= NbTriangle;
meshDesc.pointStrideBytes = sizeof(NxVec3);
meshDesc.triangleStrideBytes= 3*sizeof(NxU32);
meshDesc.points= (NxVec3*)malloc(sizeof(NxVec3)*meshDesc.numVertices);
meshDesc.triangles= (NxU32*)malloc(sizeof(NxU32)*meshDesc.numTriangles*3);
//Fill the geometry
int i,j;
pos[InPos].resize(meshDesc.numVertices);
normal[InPos].resize(meshDesc.numVertices);
indices[InPos].resize(meshDesc.numTriangles*3);
NxVec3 *p = (NxVec3*)meshDesc.points;
for(i = 0; i < NbVertex; i++){
p->x = vertex[3*i]+position.x;
p->y = vertex[3*i+1]+position.y;
p->z = vertex[3*i+2]+position.z;
p++;
}
//Fill the topology
NxU32 *id = (NxU32*)meshDesc.triangles;
for (i = 0; i < NbTriangle*3 ; i++){
NxU32 c = index[i];
id[i] = c;
}
//Make sure everything is fine so far
if(!(meshDesc.isValid()))
cerr<<"Mesh invalid."<<endl;
MemoryWriteBuffer wb;
if(!meshDesc.isValid())
cout<<"erro";
if (!gCooking->NxCookClothMesh(meshDesc, wb))
return;
MemoryReadBuffer rb(wb.data);
NxClothMesh *mClothMesh = gScene->getPhysicsSDK().createClothMesh(rb);
NxClothDesc desc;
NxMeshData receiveBuffers;
//Fill in receive buffers...
receiveBuffers.setToDefault();
desc.clothMesh = mClothMesh;
receiveBuffers.verticesPosBegin =&(pos[InPos][0].x);
receiveBuffers.indicesBegin = indices[InPos][0];
receiveBuffers.verticesNormalBegin = &(normal[InPos][0].x);
receiveBuffers.verticesPosByteStride = sizeof(NxVec3);
receiveBuffers.verticesNormalByteStride = sizeof(NxVec3);
receiveBuffers.indicesByteStride = sizeof(NxU32);
receiveBuffers.maxIndices = NbTriangle*3;
receiveBuffers.maxVertices = NbVertex;
receiveBuffers.numVerticesPtr = &mNumVertices;
receiveBuffers.numIndicesPtr = &mNumIndices;
receiveBuffers.dirtyBufferFlagsPtr = &mMeshDirtyFlags;
receiveBuffers.parentIndicesBegin = (NxU32*)malloc(sizeof(NxU32)*NbVertex);
receiveBuffers.parentIndicesByteStride = sizeof(NxU32);
receiveBuffers.maxParentIndices = NbVertex;
receiveBuffers.numParentIndicesPtr = &mNumParentIndices;
mMeshDirtyFlags = 0;
mNumVertices = 0;
mNumIndices = 0;
mNumParentIndices = 0;
desc.flags = NX_CLF_VISUALIZATION;
desc.meshData = receiveBuffers;
cout<<"check"<<receiveBuffers.checkValid()<<"\n";
if(!desc.isValid())
cout<<"wrong";
mCloth = gScene->createCloth(desc);
}