From ef6937e69e8ee3f409cf9d460d5ad300a65d5924 Mon Sep 17 00:00:00 2001 From: sschirm Date: Fri, 23 Dec 2016 14:20:36 +0100 Subject: PhysX 3.4 / APEX 1.4 release candidate @21506124 --- PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp | 264 ----------------------------- 1 file changed, 264 deletions(-) delete mode 100644 PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp (limited to 'PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp') diff --git a/PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp b/PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp deleted file mode 100644 index 26000832..00000000 --- a/PhysX_3.4/Source/GeomUtils/src/GuDebug.cpp +++ /dev/null @@ -1,264 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed to you -// under a form of NVIDIA software license agreement provided separately to you. -// -// Notice -// NVIDIA Corporation and its licensors retain all intellectual property and -// proprietary rights in and to this software and related documentation and -// any modifications thereto. Any use, reproduction, disclosure, or -// distribution of this software and related documentation without an express -// license agreement from NVIDIA Corporation is strictly prohibited. -// -// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES -// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Information and code furnished is believed to be accurate and reliable. -// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved. -// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. -// Copyright (c) 2001-2004 NovodeX AG. All rights reserved. - -#include "GuDebug.h" -#include "GuHeightFieldUtil.h" -#include "GuTriangleMesh.h" -#include "GuConvexMesh.h" -#include "PxVisualizationParameter.h" -#include "PxBoxGeometry.h" -#include "PxSphereGeometry.h" -#include "PxPlaneGeometry.h" -#include "PxCapsuleGeometry.h" -#include "PxConvexMeshGeometry.h" -#include "PxGeometryQuery.h" -#include "PxMeshQuery.h" - -using namespace physx; -using namespace Gu; - -#if PX_ENABLE_DEBUG_VISUALIZATION - -static void visualizeSphere(const PxSphereGeometry& geometry, Cm::RenderOutput& out, const PxTransform& absPose) -{ - const PxU32 scolor = PxU32(PxDebugColor::eARGB_MAGENTA); - - out << scolor << absPose << Cm::DebugCircle(100, geometry.radius); - - PxMat44 rotPose(absPose); - Ps::swap(rotPose.column1, rotPose.column2); - rotPose.column1 = -rotPose.column1; - out << scolor << rotPose << Cm::DebugCircle(100, geometry.radius); - - Ps::swap(rotPose.column0, rotPose.column2); - rotPose.column0 = -rotPose.column0; - out << scolor << rotPose << Cm::DebugCircle(100, geometry.radius); -} - -static void visualizePlane(const PxPlaneGeometry& /*geometry*/, Cm::RenderOutput& out, const PxTransform& absPose) -{ - const PxU32 scolor = PxU32(PxDebugColor::eARGB_MAGENTA); - - PxMat44 rotPose(absPose); - Ps::swap(rotPose.column1, rotPose.column2); - rotPose.column1 = -rotPose.column1; - - Ps::swap(rotPose.column0, rotPose.column2); - rotPose.column0 = -rotPose.column0; - for(PxReal radius = 2.0f; radius < 20.0f ; radius += 2.0f) - out << scolor << rotPose << Cm::DebugCircle(100, radius*radius); -} - -static void visualizeCapsule(const PxCapsuleGeometry& geometry, Cm::RenderOutput& out, const PxTransform& absPose) -{ - out << PxU32(PxDebugColor::eARGB_MAGENTA); - out.outputCapsule(geometry.radius, geometry.halfHeight, absPose); -} - -static void visualizeBox(const PxBoxGeometry& geometry, Cm::RenderOutput& out, const PxTransform& absPose) -{ - out << PxU32(PxDebugColor::eARGB_MAGENTA); - out << absPose << Cm::DebugBox(geometry.halfExtents); -} - -static void visualizeConvexMesh(const PxConvexMeshGeometry& geometry, Cm::RenderOutput& out, const PxTransform& absPose) -{ - (static_cast(geometry.convexMesh))->debugVisualize(out, absPose, geometry.scale); -} - -static void visualizeTriangleMesh(const PxTriangleMeshGeometry& geometry, Cm::RenderOutput& out, const PxTransform& absPose, - const PxBounds3& cullbox, const PxU64 mask, const PxReal fscale, const PxU32 numMaterials) -{ - (static_cast(geometry.triangleMesh))->debugVisualize(out, absPose, geometry.scale, cullbox, mask, fscale, numMaterials); -} - -static void visualizeHeightField(const PxHeightFieldGeometry& hfGeometry, - Cm::RenderOutput& out, const PxTransform& absPose, const PxBounds3& cullbox, - const PxU64 mask) -{ - const HeightField* heightfield = static_cast(hfGeometry.heightField); - const bool cscale = !!(mask & (PxU64(1) << PxVisualizationParameter::eCULL_BOX)); - - const PxDebugColor::Enum colors[] = - { - PxDebugColor::eARGB_BLACK, - PxDebugColor::eARGB_RED, - PxDebugColor::eARGB_GREEN, - PxDebugColor::eARGB_BLUE, - PxDebugColor::eARGB_YELLOW, - PxDebugColor::eARGB_MAGENTA, - PxDebugColor::eARGB_CYAN, - PxDebugColor::eARGB_WHITE, - PxDebugColor::eARGB_GREY, - PxDebugColor::eARGB_DARKRED, - PxDebugColor::eARGB_DARKGREEN, - PxDebugColor::eARGB_DARKBLUE, - }; - const PxU32 colorCount = sizeof(colors)/sizeof(PxDebugColor::Enum); - - if (mask & (PxU64(1) << PxVisualizationParameter::eCOLLISION_SHAPES)) - { - - // PT: TODO: the debug viz for HFs is minimal at the moment... - PxU32 scolor = PxU32(PxDebugColor::eARGB_YELLOW); - const PxMat44 midt = PxMat44(PxIdentity); - - HeightFieldUtil hfUtil(hfGeometry); - - const PxU32 nbRows = heightfield->getNbRowsFast(); - const PxU32 nbColumns = heightfield->getNbColumnsFast(); - const PxU32 nbVerts = nbRows * nbColumns; - const PxU32 nbTriangles = 2 * nbVerts; - - out << midt << scolor; // PT: no need to output the same matrix/color for each triangle - - if(cscale) - { - const PxTransform pose0((cullbox.maximum + cullbox.minimum)*0.5f); - const PxBoxGeometry boxGeometry((cullbox.maximum - cullbox.minimum)*0.5f); - - const PxTransform pose1(absPose); - - PxU32* results = reinterpret_cast(PX_ALLOC(sizeof(PxU32)*nbTriangles, "tmp triangle indices")); - - bool overflow = false; - PxU32 nbTouchedTris = PxMeshQuery::findOverlapHeightField(boxGeometry, pose0, hfGeometry, pose1, results, nbTriangles, 0, overflow); - - PxDebugLine* segments = out.reserveSegments(nbTouchedTris*3); - - for (PxU32 i=0; iisValidTriangle(index) && heightfield->getTriangleMaterial(index) != PxHeightFieldMaterial::eHOLE) - { - const PxU16 localMaterialIndex = heightfield->getTriangleMaterialIndex(index); - scolor = colors[localMaterialIndex % colorCount]; - - segments[0] = PxDebugLine(currentTriangle.verts[0], currentTriangle.verts[1], scolor); - segments[1] = PxDebugLine(currentTriangle.verts[1], currentTriangle.verts[2], scolor); - segments[2] = PxDebugLine(currentTriangle.verts[2], currentTriangle.verts[0], scolor); - segments+=3; - } - } - PX_FREE(results); - } - else - { - - // PT: transform vertices only once - PxVec3* tmpVerts = reinterpret_cast(PX_ALLOC(sizeof(PxVec3)*nbVerts, "PxVec3")); - // PT: TODO: optimize the following line - for(PxU32 i=0;igetVertex(i))); - - for(PxU32 i=0; iisValidTriangle(i) && heightfield->getTriangleMaterial(i) != PxHeightFieldMaterial::eHOLE) - { - PxU32 vi0, vi1, vi2; - heightfield->getTriangleVertexIndices(i, vi0, vi1, vi2); - const PxU16 localMaterialIndex = heightfield->getTriangleMaterialIndex(i); - out << colors[localMaterialIndex % colorCount]; - - const PxVec3& vw0 = tmpVerts[vi0]; - const PxVec3& vw1 = tmpVerts[vi1]; - const PxVec3& vw2 = tmpVerts[vi2]; - - out.outputSegment(vw0, vw1); - out.outputSegment(vw1, vw2); - out.outputSegment(vw2, vw0); - } - } - PX_FREE(tmpVerts); - } - } -} - -namespace physx -{ -namespace Gu -{ - -void Debug::visualize(const PxGeometry& geometry, - Cm::RenderOutput& out, - const PxTransform& absPose, - const PxBounds3& cullbox, - const PxU64 mask, - const PxReal fscale, - const PxU32 numMaterials) -{ - - const bool cull((mask & (PxU64(1) << PxVisualizationParameter::eCULL_BOX)) != 0); - const bool collisionShapes((mask & (PxU64(1) << PxVisualizationParameter::eCOLLISION_SHAPES)) != 0); - - if(cull && !cullbox.intersects(PxGeometryQuery::getWorldBounds(geometry, absPose, 0.0f))) - return; - - // triangle meshes can render active edges, but for other types we can just early out if there are no collision shapes - if(!collisionShapes && geometry.getType() != PxGeometryType::eTRIANGLEMESH) - return; - - switch(geometry.getType()) - { - case PxGeometryType::eSPHERE: - visualizeSphere(static_cast(geometry), out, absPose); - break; - case PxGeometryType::eBOX: - visualizeBox(static_cast(geometry), out, absPose); - break; - case PxGeometryType::ePLANE: - visualizePlane(static_cast(geometry), out, absPose); - break; - case PxGeometryType::eCAPSULE: - visualizeCapsule(static_cast(geometry), out, absPose); - break; - case PxGeometryType::eCONVEXMESH: - visualizeConvexMesh(static_cast(geometry), out, absPose); - break; - case PxGeometryType::eTRIANGLEMESH: - visualizeTriangleMesh(static_cast(geometry), out, absPose, cullbox, mask, fscale, numMaterials); - break; - case PxGeometryType::eHEIGHTFIELD: - visualizeHeightField(static_cast(geometry), out, absPose, cullbox, mask); - break; - case PxGeometryType::eINVALID: - break; - case PxGeometryType::eGEOMETRY_COUNT: - break; - } -} -} -} - -#endif -- cgit v1.2.3