aboutsummaryrefslogtreecommitdiff
path: root/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2018-01-22 14:04:16 -0800
committerBryan Galdrikian <[email protected]>2018-01-22 14:04:16 -0800
commit1dc1a87fba520bb45c1ce8165e8ea2c83c0a308d (patch)
tree5f8ca75a6b92c60fb5cf3b14282fc4cc1c127eb2 /sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp
parentUpdating readme.md to show updated UE4 Blast integration branches (diff)
downloadblast-1dc1a87fba520bb45c1ce8165e8ea2c83c0a308d.tar.xz
blast-1dc1a87fba520bb45c1ce8165e8ea2c83c0a308d.zip
Changes for 1.1.2 release candidate
See README.md, docs/release_notes.txt
Diffstat (limited to 'sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp')
-rw-r--r--sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp83
1 files changed, 69 insertions, 14 deletions
diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp
index 423a2ed..d5169b4 100644
--- a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp
+++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp
@@ -12,14 +12,18 @@
#include "NvBlastExtAuthoringMeshImpl.h"
#include "NvBlastExtAuthoringTypes.h"
-#include <string.h>
#include "NvBlastExtAuthoringPerlinNoise.h"
+#include <NvBlastAssert.h>
+#include "PxMath.h"
#include <cmath>
+#include <string.h>
using physx::PxVec2;
using physx::PxVec3;
using physx::PxBounds3;
+#define UV_SCALE 1.f
+
namespace Nv
{
namespace Blast
@@ -212,7 +216,7 @@ void MeshImpl::recalculateBoundingBox()
-void getTangents(PxVec3& normal, PxVec3& t1, PxVec3& t2)
+void getTangents(const PxVec3& normal, PxVec3& t1, PxVec3& t2)
{
if (std::abs(normal.z) < 0.9)
@@ -260,17 +264,17 @@ Mesh* getCuttingBox(const PxVec3& point, const PxVec3& normal, float size, int64
positions[7].n = -lNormal;
positions[0].uv[0] = PxVec2(0, 0);
- positions[1].uv[0] = PxVec2(10, 0);
+ positions[1].uv[0] = PxVec2(UV_SCALE, 0);
- positions[2].uv[0] = PxVec2(10, 10);
- positions[3].uv[0] = PxVec2(0, 10);
+ positions[2].uv[0] = PxVec2(UV_SCALE, UV_SCALE);
+ positions[3].uv[0] = PxVec2(0, UV_SCALE);
positions[4].uv[0] = PxVec2(0, 0);
- positions[5].uv[0] = PxVec2(10, 0);
+ positions[5].uv[0] = PxVec2(UV_SCALE, 0);
- positions[6].uv[0] = PxVec2(10, 10);
- positions[7].uv[0] = PxVec2(0, 10);
+ positions[6].uv[0] = PxVec2(UV_SCALE, UV_SCALE);
+ positions[7].uv[0] = PxVec2(0, UV_SCALE);
std::vector<Edge> edges;
@@ -422,12 +426,15 @@ Mesh* getNoisyCuttingBoxPair(const physx::PxVec3& point, const physx::PxVec3& no
PxVec3 t2d = -t2 * 2.0f * jaggedPlaneSize / resolution;
int32_t vrtId = 0;
+ float invRes = 1.f / resolution;
for (uint32_t i = 0; i < resolution + 1; ++i)
{
PxVec3 lcPosit = cPosit;
for (uint32_t j = 0; j < resolution + 1; ++j)
{
vertices[vrtId].p = lcPosit;
+ vertices[vrtId].uv[0].x = invRes * i * UV_SCALE;
+ vertices[vrtId].uv[0].y = invRes * j * UV_SCALE;
lcPosit += t1d;
vrtId++;
}
@@ -570,17 +577,17 @@ Mesh* getBigBox(const PxVec3& point, float size, int32_t interiorMaterialId)
positions[7].p = point + (t1 - t2 + normal) * size;
positions[0].uv[0] = PxVec2(0, 0);
- positions[1].uv[0] = PxVec2(10, 0);
+ positions[1].uv[0] = PxVec2(UV_SCALE, 0);
- positions[2].uv[0] = PxVec2(10, 10);
- positions[3].uv[0] = PxVec2(0, 10);
+ positions[2].uv[0] = PxVec2(UV_SCALE, UV_SCALE);
+ positions[3].uv[0] = PxVec2(0, UV_SCALE);
positions[4].uv[0] = PxVec2(0, 0);
- positions[5].uv[0] = PxVec2(10, 0);
+ positions[5].uv[0] = PxVec2(UV_SCALE, 0);
- positions[6].uv[0] = PxVec2(10, 10);
- positions[7].uv[0] = PxVec2(0, 10);
+ positions[6].uv[0] = PxVec2(UV_SCALE, UV_SCALE);
+ positions[7].uv[0] = PxVec2(0, UV_SCALE);
std::vector<Edge> edges;
@@ -627,5 +634,53 @@ Mesh* getBigBox(const PxVec3& point, float size, int32_t interiorMaterialId)
return new MeshImpl(positions.data(), edges.data(), facets.data(), static_cast<uint32_t>(positions.size()), static_cast<uint32_t>(edges.size()), static_cast<uint32_t>(facets.size()));
}
+Mesh* getCuttingCylinder(uint32_t pointCount, const physx::PxVec3* points, const physx::PxTransform& transform, float height, int64_t id, int32_t interiorMaterialId)
+{
+ std::vector<Vertex> positions(pointCount * 2);
+ std::vector<Edge> edges(pointCount * 6);
+ std::vector<Facet> facets(pointCount + 2);
+
+ for (uint32_t i = 0; i < pointCount; i++)
+ {
+ uint32_t i1 = i + pointCount;
+ uint32_t i2 = i1 + 1;
+ uint32_t i3 = i + 1;
+
+ auto& p0 = positions[i];
+ auto& p1 = positions[i1];
+ p0.n = p1.n = PxVec3(0, 0, 0);
+ p0.p = p1.p = points[i];
+ p0.p.z = -height;
+ p1.p.z = height;
+ p0.p = transform.transform(p0.p);
+ p1.p = transform.transform(p1.p);
+ p0.uv[0] = PxVec2(0.f, UV_SCALE * i / pointCount);
+ p1.uv[0] = PxVec2(UV_SCALE, UV_SCALE * i / pointCount);
+
+ int32_t edgeIdx = 4 * i;
+ edges[edgeIdx + 0] = Edge(i, i3);
+ edges[edgeIdx + 1] = Edge(i3, i2);
+ edges[edgeIdx + 2] = Edge(i2, i1);
+ edges[edgeIdx + 3] = Edge(i1, i);
+ facets[i] = Facet(edgeIdx, 4, interiorMaterialId, id, -1);
+
+ edges[5 * pointCount + i ] = Edge(i1, i2);
+ edges[5 * pointCount - i - 1] = Edge(i3, i);
+ }
+
+ int32_t edgeIdx = 4 * (pointCount - 1);
+ edges[edgeIdx + 0].e = 0;
+ edges[edgeIdx + 1].s = 0;
+ edges[edgeIdx + 1].e = pointCount;
+ edges[edgeIdx + 2].s = pointCount;
+
+ //top and bottom faces
+ edges[4 * pointCount].s = 0;
+ edges[6 * pointCount - 1].e = pointCount;
+ facets[pointCount + 0] = Facet(4 * pointCount, pointCount, interiorMaterialId, 0, -1);
+ facets[pointCount + 1] = Facet(5 * pointCount, pointCount, interiorMaterialId, 0, -1);
+ return new MeshImpl(positions.data(), edges.data(), facets.data(), static_cast<uint32_t>(positions.size()), static_cast<uint32_t>(edges.size()), static_cast<uint32_t>(facets.size()));
+}
+
} // namespace Blast
} // namespace Nv