mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Recast: variable name cleanup and improve documentation
Renamed variables to accommodate the XZ -> XY change. Also fixed a dead URL to point to an archived version to maintain documentation.
This commit is contained in:
parent
a99b9cc850
commit
ad44b3f010
@ -1093,7 +1093,7 @@ int rcGetHeightFieldSpanCount(rcContext* context, const rcHeightfield& heightfie
|
|||||||
/// @param[out] compactHeightfield The resulting compact heightfield. (Must be pre-allocated.)
|
/// @param[out] compactHeightfield The resulting compact heightfield. (Must be pre-allocated.)
|
||||||
/// @returns True if the operation completed successfully.
|
/// @returns True if the operation completed successfully.
|
||||||
bool rcBuildCompactHeightfield(rcContext* context, int walkableHeight, int walkableClimb,
|
bool rcBuildCompactHeightfield(rcContext* context, int walkableHeight, int walkableClimb,
|
||||||
rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield);
|
const rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield);
|
||||||
|
|
||||||
/// Erodes the walkable area within the heightfield by the specified radius.
|
/// Erodes the walkable area within the heightfield by the specified radius.
|
||||||
/// @ingroup recast
|
/// @ingroup recast
|
||||||
@ -1281,7 +1281,7 @@ bool rcBuildHeightfieldLayers(rcContext* ctx, rcCompactHeightfield& chf,
|
|||||||
/// @param[out] cset The resulting contour set. (Must be pre-allocated.)
|
/// @param[out] cset The resulting contour set. (Must be pre-allocated.)
|
||||||
/// @param[in] buildFlags The build flags. (See: #rcBuildContoursFlags)
|
/// @param[in] buildFlags The build flags. (See: #rcBuildContoursFlags)
|
||||||
/// @returns True if the operation completed successfully.
|
/// @returns True if the operation completed successfully.
|
||||||
bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf,
|
bool rcBuildContours(rcContext* ctx, const rcCompactHeightfield& chf,
|
||||||
float maxError, int maxEdgeLen,
|
float maxError, int maxEdgeLen,
|
||||||
rcContourSet& cset, int buildFlags = RC_CONTOUR_TESS_WALL_EDGES);
|
rcContourSet& cset, int buildFlags = RC_CONTOUR_TESS_WALL_EDGES);
|
||||||
|
|
||||||
|
22
src/thirdparty/recast/Recast/Source/Recast.cpp
vendored
22
src/thirdparty/recast/Recast/Source/Recast.cpp
vendored
@ -401,19 +401,19 @@ int rcGetHeightFieldSpanCount(rcContext* context, const rcHeightfield& heightfie
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, const int walkableClimb,
|
bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, const int walkableClimb,
|
||||||
rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield)
|
const rcHeightfield& heightfield, rcCompactHeightfield& compactHeightfield)
|
||||||
{
|
{
|
||||||
rcAssert(context);
|
rcAssert(context);
|
||||||
|
|
||||||
rcScopedTimer timer(context, RC_TIMER_BUILD_COMPACTHEIGHTFIELD);
|
rcScopedTimer timer(context, RC_TIMER_BUILD_COMPACTHEIGHTFIELD);
|
||||||
|
|
||||||
const int xSize = heightfield.width;
|
const int xSize = heightfield.width;
|
||||||
const int zSize = heightfield.height;
|
const int ySize = heightfield.height;
|
||||||
const int spanCount = rcGetHeightFieldSpanCount(context, heightfield);
|
const int spanCount = rcGetHeightFieldSpanCount(context, heightfield);
|
||||||
|
|
||||||
// Fill in header.
|
// Fill in header.
|
||||||
compactHeightfield.width = xSize;
|
compactHeightfield.width = xSize;
|
||||||
compactHeightfield.height = zSize;
|
compactHeightfield.height = ySize;
|
||||||
compactHeightfield.spanCount = spanCount;
|
compactHeightfield.spanCount = spanCount;
|
||||||
compactHeightfield.walkableHeight = walkableHeight;
|
compactHeightfield.walkableHeight = walkableHeight;
|
||||||
compactHeightfield.walkableClimb = walkableClimb;
|
compactHeightfield.walkableClimb = walkableClimb;
|
||||||
@ -423,13 +423,13 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con
|
|||||||
compactHeightfield.bmax[2] += walkableHeight * heightfield.ch;
|
compactHeightfield.bmax[2] += walkableHeight * heightfield.ch;
|
||||||
compactHeightfield.cs = heightfield.cs;
|
compactHeightfield.cs = heightfield.cs;
|
||||||
compactHeightfield.ch = heightfield.ch;
|
compactHeightfield.ch = heightfield.ch;
|
||||||
compactHeightfield.cells = (rcCompactCell*)rcAlloc(sizeof(rcCompactCell) * xSize * zSize, RC_ALLOC_PERM);
|
compactHeightfield.cells = (rcCompactCell*)rcAlloc(sizeof(rcCompactCell) * xSize * ySize, RC_ALLOC_PERM);
|
||||||
if (!compactHeightfield.cells)
|
if (!compactHeightfield.cells)
|
||||||
{
|
{
|
||||||
context->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", xSize * zSize);
|
context->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", xSize * ySize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memset(compactHeightfield.cells, 0, sizeof(rcCompactCell) * xSize * zSize);
|
memset(compactHeightfield.cells, 0, sizeof(rcCompactCell) * xSize * ySize);
|
||||||
compactHeightfield.spans = (rcCompactSpan*)rcAlloc(sizeof(rcCompactSpan) * spanCount, RC_ALLOC_PERM);
|
compactHeightfield.spans = (rcCompactSpan*)rcAlloc(sizeof(rcCompactSpan) * spanCount, RC_ALLOC_PERM);
|
||||||
if (!compactHeightfield.spans)
|
if (!compactHeightfield.spans)
|
||||||
{
|
{
|
||||||
@ -449,7 +449,7 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con
|
|||||||
|
|
||||||
// Fill in cells and spans.
|
// Fill in cells and spans.
|
||||||
int currentCellIndex = 0;
|
int currentCellIndex = 0;
|
||||||
const int numColumns = xSize * zSize;
|
const int numColumns = xSize * ySize;
|
||||||
for (int columnIndex = 0; columnIndex < numColumns; ++columnIndex)
|
for (int columnIndex = 0; columnIndex < numColumns; ++columnIndex)
|
||||||
{
|
{
|
||||||
const rcSpan* span = heightfield.spans[columnIndex];
|
const rcSpan* span = heightfield.spans[columnIndex];
|
||||||
@ -483,11 +483,11 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con
|
|||||||
const int MAX_LAYERS = RC_NOT_CONNECTED - 1;
|
const int MAX_LAYERS = RC_NOT_CONNECTED - 1;
|
||||||
int maxLayerIndex = 0;
|
int maxLayerIndex = 0;
|
||||||
const int zStride = xSize; // for readability
|
const int zStride = xSize; // for readability
|
||||||
for (int z = 0; z < zSize; ++z)
|
for (int y = 0; y < ySize; ++y)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < xSize; ++x)
|
for (int x = 0; x < xSize; ++x)
|
||||||
{
|
{
|
||||||
const rcCompactCell& cell = compactHeightfield.cells[x + z * zStride];
|
const rcCompactCell& cell = compactHeightfield.cells[x + y * zStride];
|
||||||
for (int i = (int)cell.index, ni = (int)(cell.index + cell.count); i < ni; ++i)
|
for (int i = (int)cell.index, ni = (int)(cell.index + cell.count); i < ni; ++i)
|
||||||
{
|
{
|
||||||
rcCompactSpan& span = compactHeightfield.spans[i];
|
rcCompactSpan& span = compactHeightfield.spans[i];
|
||||||
@ -496,9 +496,9 @@ bool rcBuildCompactHeightfield(rcContext* context, const int walkableHeight, con
|
|||||||
{
|
{
|
||||||
rcSetCon(span, dir, RC_NOT_CONNECTED);
|
rcSetCon(span, dir, RC_NOT_CONNECTED);
|
||||||
const int neighborX = x + rcGetDirOffsetX(dir);
|
const int neighborX = x + rcGetDirOffsetX(dir);
|
||||||
const int neighborZ = z + rcGetDirOffsetY(dir);
|
const int neighborZ = y + rcGetDirOffsetY(dir);
|
||||||
// First check that the neighbour cell is in bounds.
|
// First check that the neighbour cell is in bounds.
|
||||||
if (neighborX < 0 || neighborZ < 0 || neighborX >= xSize || neighborZ >= zSize)
|
if (neighborX < 0 || neighborZ < 0 || neighborX >= xSize || neighborZ >= ySize)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ static int getCornerHeight(int x, int y, int i, int dir,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void walkContour(int x, int y, int i,
|
static void walkContour(int x, int y, int i,
|
||||||
rcCompactHeightfield& chf,
|
const rcCompactHeightfield& chf,
|
||||||
unsigned char* flags, rcIntArray& points)
|
unsigned char* flags, rcIntArray& points)
|
||||||
{
|
{
|
||||||
// Choose the first non-connected edge
|
// Choose the first non-connected edge
|
||||||
@ -183,16 +183,16 @@ static void walkContour(int x, int y, int i,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static float distancePtSeg(const int x, const int z,
|
static float distancePtSeg(const int x, const int y,
|
||||||
const int px, const int pz,
|
const int px, const int py,
|
||||||
const int qx, const int qz)
|
const int qx, const int qz)
|
||||||
{
|
{
|
||||||
float pqx = (float)(qx - px);
|
float pqx = (float)(qx - px);
|
||||||
float pqz = (float)(qz - pz);
|
float pqz = (float)(qz - py);
|
||||||
float dx = (float)(x - px);
|
float dx = (float)(x - px);
|
||||||
float dz = (float)(z - pz);
|
float dy = (float)(y - py);
|
||||||
float d = pqx*pqx + pqz*pqz;
|
float d = pqx*pqx + pqz*pqz;
|
||||||
float t = pqx*dx + pqz*dz;
|
float t = pqx*dx + pqz*dy;
|
||||||
if (d > 0)
|
if (d > 0)
|
||||||
t /= d;
|
t /= d;
|
||||||
if (t < 0)
|
if (t < 0)
|
||||||
@ -201,9 +201,9 @@ static float distancePtSeg(const int x, const int z,
|
|||||||
t = 1;
|
t = 1;
|
||||||
|
|
||||||
dx = px + t*pqx - x;
|
dx = px + t*pqx - x;
|
||||||
dz = pz + t*pqz - z;
|
dy = py + t*pqz - y;
|
||||||
|
|
||||||
return dx*dx + dz*dz;
|
return dx*dx + dy*dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void simplifyContour(rcIntArray& points, rcIntArray& simplified,
|
static void simplifyContour(rcIntArray& points, rcIntArray& simplified,
|
||||||
@ -512,7 +512,7 @@ static bool intersectProp(const int* a, const int* b, const int* c, const int* d
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns T iff (a,b,c) are collinear and point c lies
|
// Returns T iff (a,b,c) are collinear and point c lies
|
||||||
// on the closed segement ab.
|
// on the closed segment ab.
|
||||||
static bool between(const int* a, const int* b, const int* c)
|
static bool between(const int* a, const int* b, const int* c)
|
||||||
{
|
{
|
||||||
if (!collinear(a, b, c))
|
if (!collinear(a, b, c))
|
||||||
@ -541,7 +541,7 @@ static bool vequal(const int* a, const int* b)
|
|||||||
return a[0] == b[0] && a[1] == b[1];
|
return a[0] == b[0] && a[1] == b[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool intersectSegCountour(const int* d0, const int* d1, int i, int n, const int* verts)
|
static bool intersectSegContour(const int* d0, const int* d1, int i, int n, const int* verts)
|
||||||
{
|
{
|
||||||
// For each edge (k,k+1) of P
|
// For each edge (k,k+1) of P
|
||||||
for (int k = 0; k < n; k++)
|
for (int k = 0; k < n; k++)
|
||||||
@ -749,7 +749,7 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region)
|
|||||||
for (int iter = 0; iter < hole->nverts; iter++)
|
for (int iter = 0; iter < hole->nverts; iter++)
|
||||||
{
|
{
|
||||||
// Find potential diagonals.
|
// Find potential diagonals.
|
||||||
// The 'best' vertex must be in the cone described by 3 cosequtive vertices of the outline.
|
// The 'best' vertex must be in the cone described by 3 consecutive vertices of the outline.
|
||||||
// ..o j-1
|
// ..o j-1
|
||||||
// |
|
// |
|
||||||
// | * best
|
// | * best
|
||||||
@ -777,9 +777,9 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region)
|
|||||||
for (int j = 0; j < ndiags; j++)
|
for (int j = 0; j < ndiags; j++)
|
||||||
{
|
{
|
||||||
const int* pt = &outline->verts[diags[j].vert*4];
|
const int* pt = &outline->verts[diags[j].vert*4];
|
||||||
bool intersect = intersectSegCountour(pt, corner, diags[j].vert, outline->nverts, outline->verts);
|
bool intersect = intersectSegContour(pt, corner, diags[j].vert, outline->nverts, outline->verts);
|
||||||
for (int k = i; k < region.nholes && !intersect; k++)
|
for (int k = i; k < region.nholes && !intersect; k++)
|
||||||
intersect |= intersectSegCountour(pt, corner, -1, region.holes[k].contour->nverts, region.holes[k].contour->verts);
|
intersect |= intersectSegContour(pt, corner, -1, region.holes[k].contour->nverts, region.holes[k].contour->verts);
|
||||||
if (!intersect)
|
if (!intersect)
|
||||||
{
|
{
|
||||||
index = diags[j].vert;
|
index = diags[j].vert;
|
||||||
@ -820,7 +820,7 @@ static void mergeRegionHoles(rcContext* ctx, rcContourRegion& region)
|
|||||||
/// See the #rcConfig documentation for more information on the configuration parameters.
|
/// See the #rcConfig documentation for more information on the configuration parameters.
|
||||||
///
|
///
|
||||||
/// @see rcAllocContourSet, rcCompactHeightfield, rcContourSet, rcConfig
|
/// @see rcAllocContourSet, rcCompactHeightfield, rcContourSet, rcConfig
|
||||||
bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf,
|
bool rcBuildContours(rcContext* ctx, const rcCompactHeightfield& chf,
|
||||||
const float maxError, const int maxEdgeLen,
|
const float maxError, const int maxEdgeLen,
|
||||||
rcContourSet& cset, const int buildFlags)
|
rcContourSet& cset, const int buildFlags)
|
||||||
{
|
{
|
||||||
|
@ -28,9 +28,9 @@ void rcFilterLowHangingWalkableObstacles(rcContext* context, const int walkableC
|
|||||||
rcScopedTimer timer(context, RC_TIMER_FILTER_LOW_OBSTACLES);
|
rcScopedTimer timer(context, RC_TIMER_FILTER_LOW_OBSTACLES);
|
||||||
|
|
||||||
const int xSize = heightfield.width;
|
const int xSize = heightfield.width;
|
||||||
const int zSize = heightfield.height;
|
const int ySize = heightfield.height;
|
||||||
|
|
||||||
for (int z = 0; z < zSize; ++z)
|
for (int y = 0; y < ySize; ++y)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < xSize; ++x)
|
for (int x = 0; x < xSize; ++x)
|
||||||
{
|
{
|
||||||
@ -38,7 +38,7 @@ void rcFilterLowHangingWalkableObstacles(rcContext* context, const int walkableC
|
|||||||
bool previousWasWalkable = false;
|
bool previousWasWalkable = false;
|
||||||
unsigned char previousArea = RC_NULL_AREA;
|
unsigned char previousArea = RC_NULL_AREA;
|
||||||
|
|
||||||
for (rcSpan* span = heightfield.spans[x + z * xSize]; span != NULL; previousSpan = span, span = span->next)
|
for (rcSpan* span = heightfield.spans[x + y * xSize]; span != NULL; previousSpan = span, span = span->next)
|
||||||
{
|
{
|
||||||
const bool walkable = span->area != RC_NULL_AREA;
|
const bool walkable = span->area != RC_NULL_AREA;
|
||||||
// If current span is not walkable, but there is walkable
|
// If current span is not walkable, but there is walkable
|
||||||
@ -71,11 +71,11 @@ void rcFilterLedgeSpans(rcContext* context, const int walkableHeight, const int
|
|||||||
const int MAX_HEIGHT = 0xffff; // TODO (graham): Move this to a more visible constant and update usages.
|
const int MAX_HEIGHT = 0xffff; // TODO (graham): Move this to a more visible constant and update usages.
|
||||||
|
|
||||||
// Mark border spans.
|
// Mark border spans.
|
||||||
for (int z = 0; z < zSize; ++z)
|
for (int y = 0; y < zSize; ++y)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < xSize; ++x)
|
for (int x = 0; x < xSize; ++x)
|
||||||
{
|
{
|
||||||
for (rcSpan* span = heightfield.spans[x + z * xSize]; span; span = span->next)
|
for (rcSpan* span = heightfield.spans[x + y * xSize]; span; span = span->next)
|
||||||
{
|
{
|
||||||
// Skip non walkable spans.
|
// Skip non walkable spans.
|
||||||
if (span->area == RC_NULL_AREA)
|
if (span->area == RC_NULL_AREA)
|
||||||
@ -96,7 +96,7 @@ void rcFilterLedgeSpans(rcContext* context, const int walkableHeight, const int
|
|||||||
for (int direction = 0; direction < 4; ++direction)
|
for (int direction = 0; direction < 4; ++direction)
|
||||||
{
|
{
|
||||||
int dx = x + rcGetDirOffsetX(direction);
|
int dx = x + rcGetDirOffsetX(direction);
|
||||||
int dy = z + rcGetDirOffsetY(direction);
|
int dy = y + rcGetDirOffsetY(direction);
|
||||||
// Skip neighbours which are out of bounds.
|
// Skip neighbours which are out of bounds.
|
||||||
if (dx < 0 || dy < 0 || dx >= xSize || dy >= zSize)
|
if (dx < 0 || dy < 0 || dx >= xSize || dy >= zSize)
|
||||||
{
|
{
|
||||||
@ -161,16 +161,16 @@ void rcFilterWalkableLowHeightSpans(rcContext* context, const int walkableHeight
|
|||||||
rcScopedTimer timer(context, RC_TIMER_FILTER_WALKABLE);
|
rcScopedTimer timer(context, RC_TIMER_FILTER_WALKABLE);
|
||||||
|
|
||||||
const int xSize = heightfield.width;
|
const int xSize = heightfield.width;
|
||||||
const int zSize = heightfield.height;
|
const int ySize = heightfield.height;
|
||||||
const int MAX_HEIGHT = 0xffff;
|
const int MAX_HEIGHT = 0xffff;
|
||||||
|
|
||||||
// Remove walkable flag from spans which do not have enough
|
// Remove walkable flag from spans which do not have enough
|
||||||
// space above them for the agent to stand there.
|
// space above them for the agent to stand there.
|
||||||
for (int z = 0; z < zSize; ++z)
|
for (int y = 0; y < ySize; ++y)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < xSize; ++x)
|
for (int x = 0; x < xSize; ++x)
|
||||||
{
|
{
|
||||||
for (rcSpan* span = heightfield.spans[x + z*xSize]; span; span = span->next)
|
for (rcSpan* span = heightfield.spans[x + y*xSize]; span; span = span->next)
|
||||||
{
|
{
|
||||||
const int bot = (int)(span->smax);
|
const int bot = (int)(span->smax);
|
||||||
const int top = span->next ? (int)(span->next->smin) : MAX_HEIGHT;
|
const int top = span->next ? (int)(span->next->smin) : MAX_HEIGHT;
|
||||||
|
@ -35,7 +35,7 @@ static bool buildMeshAdjacency(unsigned short* polys, const int npolys,
|
|||||||
const int nverts, const int vertsPerPoly)
|
const int nverts, const int vertsPerPoly)
|
||||||
{
|
{
|
||||||
// Based on code by Eric Lengyel from:
|
// Based on code by Eric Lengyel from:
|
||||||
// http://www.terathon.com/code/edges.php
|
// https://web.archive.org/web/20080704083314/http://www.terathon.com/code/edges.php
|
||||||
|
|
||||||
int maxEdgeCount = npolys*vertsPerPoly;
|
int maxEdgeCount = npolys*vertsPerPoly;
|
||||||
unsigned short* firstEdge = (unsigned short*)rcAlloc(sizeof(unsigned short)*(nverts + maxEdgeCount), RC_ALLOC_TEMP);
|
unsigned short* firstEdge = (unsigned short*)rcAlloc(sizeof(unsigned short)*(nverts + maxEdgeCount), RC_ALLOC_TEMP);
|
||||||
@ -1044,27 +1044,11 @@ static bool removeVertex(rcContext* ctx, rcPolyMesh& mesh, const unsigned short
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void copy_flip_poly_mesh(unsigned short* input,unsigned short *output,int max_idx)
|
|
||||||
{
|
|
||||||
|
|
||||||
//find actual vertex count
|
|
||||||
int cidx = 0;
|
|
||||||
for (int i = 0; i < max_idx; i++)
|
|
||||||
if (input[i] != 0xffff)
|
|
||||||
cidx++;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
//copy it out
|
|
||||||
for (int i = 0; i < cidx; i++)
|
|
||||||
{
|
|
||||||
output[i] = input[cidx - i-1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// @par
|
/// @par
|
||||||
///
|
///
|
||||||
/// @note If the mesh data is to be used to construct a Detour navigation mesh, then the upper
|
/// @note If the mesh data is to be used to construct a Detour navigation mesh, then the upper
|
||||||
/// limit must be retricted to <= #DT_VERTS_PER_POLYGON.
|
/// limit must be restricted to <= #DT_VERTS_PER_POLYGON.
|
||||||
///
|
///
|
||||||
/// @see rcAllocPolyMesh, rcContourSet, rcPolyMesh, rcConfig
|
/// @see rcAllocPolyMesh, rcContourSet, rcPolyMesh, rcConfig
|
||||||
bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, const int nvp, rcPolyMesh& mesh)
|
bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, const int nvp, rcPolyMesh& mesh)
|
||||||
@ -1290,7 +1274,6 @@ bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, const int nvp, rcPolyMe
|
|||||||
{
|
{
|
||||||
unsigned short* p = &mesh.polys[mesh.npolys*nvp*2];
|
unsigned short* p = &mesh.polys[mesh.npolys*nvp*2];
|
||||||
unsigned short* q = &polys[j*nvp];
|
unsigned short* q = &polys[j*nvp];
|
||||||
//copy_flip_poly_mesh(q, p, nvp);
|
|
||||||
for (int k = 0; k < nvp; ++k)
|
for (int k = 0; k < nvp; ++k)
|
||||||
p[k] = q[k];
|
p[k] = q[k];
|
||||||
mesh.regs[mesh.npolys] = cont.reg;
|
mesh.regs[mesh.npolys] = cont.reg;
|
||||||
@ -1691,7 +1674,7 @@ void flip_neis_direction(unsigned short* arr, int count)
|
|||||||
p[nvp+j] = 0x8000 | 3;
|
p[nvp+j] = 0x8000 | 3;
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
void rcFlipPolyMesh(rcPolyMesh& mesh)
|
void rcFlipPolyMesh(rcPolyMesh& /*mesh*/)
|
||||||
{
|
{
|
||||||
#if !REVERSE_DIRECTION
|
#if !REVERSE_DIRECTION
|
||||||
for (int i = 0; i < mesh.npolys; i++)
|
for (int i = 0; i < mesh.npolys; i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user