MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / visualizeTriangleMesh

Function visualizeTriangleMesh

physx/source/physx/src/NpShapeManager.cpp:556–634  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

554}
555
556static void visualizeTriangleMesh(const PxTriangleMeshGeometry& geometry, RenderOutput& out, const PxTransform& pose, const PxBounds3& cullbox, const PxReal fscale, bool visualizeShapes, bool visualizeEdges, bool useCullBox)
557{
558 const TriangleMesh* triangleMesh = static_cast<const TriangleMesh*>(geometry.triangleMesh);
559
560 const PxMat44 midt(PxIdentity);
561 const Matrix34 absPose(PxMat33(pose.q) * geometry.scale.toMat33(), pose.p);
562
563 PxU32 nbTriangles = triangleMesh->getNbTrianglesFast();
564 const PxU32 nbVertices = triangleMesh->getNbVerticesFast();
565 const PxVec3* vertices = triangleMesh->getVerticesFast();
566 const void* indices = triangleMesh->getTrianglesFast();
567 const bool has16Bit = triangleMesh->has16BitIndices();
568
569 // PT: TODO: don't render the same edge multiple times
570
571 PxU32* results = NULL;
572 if(useCullBox)
573 {
574 const Gu::Box worldBox(
575 (cullbox.maximum + cullbox.minimum)*0.5f,
576 (cullbox.maximum - cullbox.minimum)*0.5f,
577 PxMat33(PxIdentity));
578
579 // PT: TODO: use the callback version here to avoid allocating this huge array
580 results = reinterpret_cast<PxU32*>(PX_ALLOC_TEMP(sizeof(PxU32)*nbTriangles, "tmp triangle indices"));
581 LimitedResults limitedResults(results, nbTriangles, 0);
582 Midphase::intersectBoxVsMesh(worldBox, *triangleMesh, pose, geometry.scale, &limitedResults);
583 nbTriangles = limitedResults.mNbResults;
584
585 if(visualizeShapes)
586 {
587 const PxU32 scolor = gCollisionShapeColor;
588
589 out << midt << scolor; // PT: no need to output this for each segment!
590
591 PxDebugLine* segments = out.reserveSegments(nbTriangles*3);
592 for(PxU32 i=0; i<nbTriangles; i++)
593 {
594 PxVec3 wp[3];
595 getTriangle(*triangleMesh, results[i], wp, vertices, indices, absPose, has16Bit);
596 outputTriangle(segments, wp[0], wp[1], wp[2], scolor);
597 segments+=3;
598 }
599 }
600 }
601 else
602 {
603 if(visualizeShapes)
604 {
605 const PxU32 scolor = gCollisionShapeColor;
606
607 out << midt << scolor; // PT: no need to output this for each segment!
608
609 // PT: TODO: use SIMD
610 PxVec3* transformed = reinterpret_cast<PxVec3*>(PX_ALLOC(sizeof(PxVec3)*nbVertices, "PxVec3"));
611 for(PxU32 i=0;i<nbVertices;i++)
612 transformed[i] = absPose.transform(vertices[i]);
613

Callers 1

visualizeFunction · 0.85

Calls 14

intersectBoxVsMeshFunction · 0.85
getTriangleFunction · 0.85
outputTriangleFunction · 0.85
visualizeFaceNormalsFunction · 0.85
visualizeActiveEdgesFunction · 0.85
toMat33Method · 0.80
getNbTrianglesFastMethod · 0.80
getNbVerticesFastMethod · 0.80
getVerticesFastMethod · 0.80
getTrianglesFastMethod · 0.80
getExtraTrigDataMethod · 0.80
PxMat33Class · 0.50

Tested by

no test coverage detected