| 308 | /////////////////////////////////////////////////////////////////////////////// |
| 309 | |
| 310 | RenderMeshActor* PhysXSample::createRenderMeshFromRawMesh(const RAWMesh& data, PxShape* shape) |
| 311 | { |
| 312 | // Create render mesh from raw mesh |
| 313 | const PxU32 nbTris = data.mNbFaces; |
| 314 | const PxU32* src = data.mIndices; |
| 315 | |
| 316 | PxU16* indices = (PxU16*)SAMPLE_ALLOC(sizeof(PxU16)*nbTris*3); |
| 317 | for(PxU32 i=0;i<nbTris;i++) |
| 318 | { |
| 319 | indices[i*3+0] = src[i*3+0]; |
| 320 | indices[i*3+1] = src[i*3+2]; |
| 321 | indices[i*3+2] = src[i*3+1]; |
| 322 | } |
| 323 | |
| 324 | RenderMeshActor* meshActor = SAMPLE_NEW(RenderMeshActor)(*getRenderer(), data.mVerts, data.mNbVerts, data.mVertexNormals, data.mUVs, indices, NULL, nbTris); |
| 325 | SAMPLE_FREE(indices); |
| 326 | |
| 327 | if(data.mMaterialID!=0xffffffff) |
| 328 | { |
| 329 | size_t nbMaterials = mRenderMaterials.size(); |
| 330 | for(PxU32 i=0;i<nbMaterials;i++) |
| 331 | { |
| 332 | if(mRenderMaterials[i]->mID==data.mMaterialID) |
| 333 | { |
| 334 | meshActor->setRenderMaterial(mRenderMaterials[i]); |
| 335 | break; |
| 336 | } |
| 337 | } |
| 338 | } |
| 339 | |
| 340 | meshActor->setTransform(data.mTransform); |
| 341 | if(data.mName) |
| 342 | strcpy(meshActor->mName, data.mName); |
| 343 | |
| 344 | mRenderActors.push_back(meshActor); |
| 345 | return meshActor; |
| 346 | } |
| 347 | |
| 348 | /////////////////////////////////////////////////////////////////////////////// |
| 349 |
no test coverage detected