More robust handling of detail mesh height values.
This commit is contained in:
parent
dd5377a503
commit
ce338df394
@ -194,7 +194,7 @@ static float distToPoly(int nvert, const float* verts, const float* p)
|
||||
}
|
||||
|
||||
|
||||
static unsigned short getHeight(const float fx, const float fz, const float cs, const float ics, const rcHeightPatch& hp)
|
||||
static unsigned short getHeight(const float fx, const float fy, const float fz, const float cs, const float ics, const float ch, const rcHeightPatch& hp)
|
||||
{
|
||||
int ix = (int)floorf(fx*ics + 0.01f);
|
||||
int iz = (int)floorf(fz*ics + 0.01f);
|
||||
@ -214,14 +214,22 @@ static unsigned short getHeight(const float fx, const float fz, const float cs,
|
||||
if (nx < 0 || nz < 0 || nx >= hp.width || nz >= hp.height) continue;
|
||||
const unsigned short nh = hp.data[nx+nz*hp.width];
|
||||
if (nh == RC_UNSET_HEIGHT) continue;
|
||||
const float dx = (nx+0.5f)*cs - fx;
|
||||
|
||||
const float d = fabsf(nh*ch - fy);
|
||||
if (d < dmin)
|
||||
{
|
||||
h = nh;
|
||||
dmin = d;
|
||||
}
|
||||
|
||||
/* const float dx = (nx+0.5f)*cs - fx;
|
||||
const float dz = (nz+0.5f)*cs - fz;
|
||||
const float d = dx*dx+dz*dz;
|
||||
if (d < dmin)
|
||||
{
|
||||
h = nh;
|
||||
dmin = d;
|
||||
}
|
||||
} */
|
||||
}
|
||||
}
|
||||
return h;
|
||||
@ -534,6 +542,7 @@ static bool buildPolyDetail(const float* in, const int nin,
|
||||
}
|
||||
// Create samples along the edge.
|
||||
float dx = vi[0] - vj[0];
|
||||
float dy = vi[1] - vj[1];
|
||||
float dz = vi[2] - vj[2];
|
||||
float d = sqrtf(dx*dx + dz*dz);
|
||||
int nn = 1 + (int)floorf(d/sampleDist);
|
||||
@ -545,8 +554,9 @@ static bool buildPolyDetail(const float* in, const int nin,
|
||||
float u = (float)k/(float)nn;
|
||||
float* pos = &edge[k*3];
|
||||
pos[0] = vj[0] + dx*u;
|
||||
pos[1] = vj[1] + dy*u;
|
||||
pos[2] = vj[2] + dz*u;
|
||||
pos[1] = getHeight(pos[0], pos[2], cs, ics, hp)*chf.ch;
|
||||
pos[1] = getHeight(pos[0],pos[1],pos[2], cs, ics, chf.ch, hp)*chf.ch;
|
||||
}
|
||||
// Simplify samples.
|
||||
int idx[MAX_EDGE] = {0,nn};
|
||||
@ -651,11 +661,12 @@ static bool buildPolyDetail(const float* in, const int nin,
|
||||
{
|
||||
float pt[3];
|
||||
pt[0] = x*sampleDist;
|
||||
pt[1] = (bmax[1]+bmin[1])*0.5f;
|
||||
pt[2] = z*sampleDist;
|
||||
// Make sure the samples are not too close to the edges.
|
||||
if (distToPoly(nin,in,pt) > -sampleDist/2) continue;
|
||||
samples.push(x);
|
||||
samples.push(getHeight(pt[0], pt[2], cs, ics, hp));
|
||||
samples.push(getHeight(pt[0], pt[1], pt[2], cs, ics, chf.ch, hp));
|
||||
samples.push(z);
|
||||
}
|
||||
}
|
||||
@ -713,71 +724,43 @@ static void getHeightData(const rcCompactHeightfield& chf,
|
||||
// Floodfill the heightfield to get 2D height data,
|
||||
// starting at vertex locations as seeds.
|
||||
|
||||
memset(hp.data, 0xff, sizeof(unsigned short)*hp.width*hp.height);
|
||||
memset(hp.data, 0, sizeof(unsigned short)*hp.width*hp.height);
|
||||
|
||||
stack.resize(0);
|
||||
|
||||
static const int offset[9*2] =
|
||||
{
|
||||
0,0, -1,-1, 0,-1, 1,-1, 1,0, 1,1, 0,1, -1,1, -1,0,
|
||||
};
|
||||
|
||||
// Use poly vertices as seed points for the flood fill.
|
||||
for (int j = 0; j < npoly; ++j)
|
||||
{
|
||||
const int ax = (int)verts[poly[j]*3+0];
|
||||
int cx = 0, cz = 0, ci =-1;
|
||||
int dmin = RC_UNSET_HEIGHT;
|
||||
for (int k = 0; k < 9; ++k)
|
||||
{
|
||||
const int ax = (int)verts[poly[j]*3+0] + offset[k*2+0];
|
||||
const int ay = (int)verts[poly[j]*3+1];
|
||||
const int az = (int)verts[poly[j]*3+2];
|
||||
const int az = (int)verts[poly[j]*3+2] + offset[k*2+1];
|
||||
if (ax < hp.xmin || ax >= hp.xmin+hp.width ||
|
||||
az < hp.ymin || az >= hp.ymin+hp.height)
|
||||
continue;
|
||||
|
||||
const rcCompactCell& c = chf.cells[ax+az*chf.width];
|
||||
int dmin = RC_UNSET_HEIGHT;
|
||||
int ai = -1;
|
||||
for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
|
||||
{
|
||||
const rcCompactSpan& s = chf.spans[i];
|
||||
int d = rcAbs(ay - (int)s.y);
|
||||
if (d < dmin)
|
||||
{
|
||||
ai = i;
|
||||
dmin = d;
|
||||
}
|
||||
}
|
||||
if (ai != -1)
|
||||
{
|
||||
stack.push(ax);
|
||||
stack.push(az);
|
||||
stack.push(ai);
|
||||
}
|
||||
}
|
||||
|
||||
// Not no match, try polygon center.
|
||||
if (stack.size() == 0)
|
||||
{
|
||||
int cx = 0, cy = 0, cz = 0;
|
||||
for (int j = 0; j < npoly; ++j)
|
||||
{
|
||||
cx += (int)verts[poly[j]*3+0];
|
||||
cy += (int)verts[poly[j]*3+1];
|
||||
cz += (int)verts[poly[j]*3+2];
|
||||
}
|
||||
cx /= npoly;
|
||||
cy /= npoly;
|
||||
cz /= npoly;
|
||||
|
||||
if (cx >= hp.xmin && cx < hp.xmin+hp.width &&
|
||||
cz >= hp.ymin && cz < hp.ymin+hp.height)
|
||||
{
|
||||
const rcCompactCell& c = chf.cells[cx+cz*chf.width];
|
||||
int dmin = RC_UNSET_HEIGHT;
|
||||
int ci = -1;
|
||||
for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
|
||||
{
|
||||
const rcCompactSpan& s = chf.spans[i];
|
||||
int d = rcAbs(cy - (int)s.y);
|
||||
if (d < dmin)
|
||||
{
|
||||
cx = ax;
|
||||
cz = az;
|
||||
ci = i;
|
||||
dmin = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ci != -1)
|
||||
{
|
||||
stack.push(cx);
|
||||
@ -785,6 +768,25 @@ static void getHeightData(const rcCompactHeightfield& chf,
|
||||
stack.push(ci);
|
||||
}
|
||||
}
|
||||
|
||||
// Find center of the polygon using flood fill.
|
||||
int pcx = 0, pcy = 0, pcz = 0;
|
||||
for (int j = 0; j < npoly; ++j)
|
||||
{
|
||||
pcx += (int)verts[poly[j]*3+0];
|
||||
pcy += (int)verts[poly[j]*3+1];
|
||||
pcz += (int)verts[poly[j]*3+2];
|
||||
}
|
||||
pcx /= npoly;
|
||||
pcy /= npoly;
|
||||
pcz /= npoly;
|
||||
|
||||
for (int i = 0; i < stack.size(); i += 3)
|
||||
{
|
||||
int cx = stack[i+0];
|
||||
int cy = stack[i+1];
|
||||
int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width;
|
||||
hp.data[idx] = 1;
|
||||
}
|
||||
|
||||
while (stack.size() > 0)
|
||||
@ -793,14 +795,70 @@ static void getHeightData(const rcCompactHeightfield& chf,
|
||||
int cy = stack.pop();
|
||||
int cx = stack.pop();
|
||||
|
||||
// Skip already visited locations.
|
||||
int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width;
|
||||
if (hp.data[idx] != RC_UNSET_HEIGHT)
|
||||
continue;
|
||||
// Check if close to center of the polygon.
|
||||
if (rcAbs(cx-pcx) <= 1 && rcAbs(cy-pcz) <= 1)
|
||||
{
|
||||
stack.resize(0);
|
||||
stack.push(cx);
|
||||
stack.push(cy);
|
||||
stack.push(ci);
|
||||
break;
|
||||
}
|
||||
|
||||
const rcCompactSpan& cs = chf.spans[ci];
|
||||
hp.data[idx] = cs.y;
|
||||
|
||||
for (int dir = 0; dir < 4; ++dir)
|
||||
{
|
||||
if (rcGetCon(cs, dir) == RC_NOT_CONNECTED) continue;
|
||||
|
||||
const int ax = cx + rcGetDirOffsetX(dir);
|
||||
const int ay = cy + rcGetDirOffsetY(dir);
|
||||
|
||||
if (ax < hp.xmin || ax >= (hp.xmin+hp.width) ||
|
||||
ay < hp.ymin || ay >= (hp.ymin+hp.height))
|
||||
continue;
|
||||
|
||||
if (hp.data[ax-hp.xmin+(ay-hp.ymin)*hp.width] != 0)
|
||||
continue;
|
||||
|
||||
const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir);
|
||||
|
||||
int idx = ax-hp.xmin+(ay-hp.ymin)*hp.width;
|
||||
hp.data[idx] = 1;
|
||||
|
||||
stack.push(ax);
|
||||
stack.push(ay);
|
||||
stack.push(ai);
|
||||
}
|
||||
}
|
||||
|
||||
memset(hp.data, 0xff, sizeof(unsigned short)*hp.width*hp.height);
|
||||
|
||||
// Mark start locations.
|
||||
for (int i = 0; i < stack.size(); i += 3)
|
||||
{
|
||||
int cx = stack[i+0];
|
||||
int cy = stack[i+1];
|
||||
int ci = stack[i+2];
|
||||
int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width;
|
||||
const rcCompactSpan& cs = chf.spans[ci];
|
||||
hp.data[idx] = cs.y;
|
||||
}
|
||||
|
||||
while (stack.size() > 0)
|
||||
{
|
||||
/* int cx = stack[0];
|
||||
int cy = stack[1];
|
||||
int ci = stack[2];
|
||||
if (stack.size() >= 3)
|
||||
memmove(&stack[0], &stack[3], sizeof(int)*(stack.size()-3));
|
||||
stack.resize(stack.size()-3);*/
|
||||
|
||||
int ci = stack.pop();
|
||||
int cy = stack.pop();
|
||||
int cx = stack.pop();
|
||||
|
||||
const rcCompactSpan& cs = chf.spans[ci];
|
||||
for (int dir = 0; dir < 4; ++dir)
|
||||
{
|
||||
if (rcGetCon(cs, dir) == RC_NOT_CONNECTED) continue;
|
||||
@ -817,11 +875,16 @@ static void getHeightData(const rcCompactHeightfield& chf,
|
||||
|
||||
const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir);
|
||||
|
||||
const rcCompactSpan& as = chf.spans[ai];
|
||||
int idx = ax-hp.xmin+(ay-hp.ymin)*hp.width;
|
||||
hp.data[idx] = as.y;
|
||||
|
||||
stack.push(ax);
|
||||
stack.push(ay);
|
||||
stack.push(ai);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static unsigned char getEdgeFlags(const float* va, const float* vb,
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -281,14 +281,14 @@
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>30</integer>
|
||||
<integer>21</integer>
|
||||
<integer>11</integer>
|
||||
<integer>3</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
</array>
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
|
||||
<string>{{0, 334}, {358, 643}}</string>
|
||||
<string>{{0, 0}, {358, 643}}</string>
|
||||
</dict>
|
||||
<key>PBXTopSmartGroupGIDs</key>
|
||||
<array/>
|
||||
@ -323,7 +323,7 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A30F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Recast.h</string>
|
||||
<string>RecastMeshDetail.cpp</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
@ -331,11 +331,11 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A40F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Recast.h</string>
|
||||
<string>RecastMeshDetail.cpp</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>6B324F4E11258C7000EBD2FD</string>
|
||||
<string>6B324FCA11259FFA00EBD2FD</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>6B8DE70D10B01BBF00DF20FB</string>
|
||||
@ -348,7 +348,6 @@
|
||||
<string>6BF7C2441111DAC1002B3F46</string>
|
||||
<string>6BF7C2761112BE4F002B3F46</string>
|
||||
<string>6BF7C2851112C348002B3F46</string>
|
||||
<string>6BF7C36E1112EB25002B3F46</string>
|
||||
<string>6BF7C394111316AD002B3F46</string>
|
||||
<string>6BF7C395111316AD002B3F46</string>
|
||||
<string>6BF7C4641115C514002B3F46</string>
|
||||
@ -365,11 +364,9 @@
|
||||
<string>6B324B50111C1AC800EBD2FD</string>
|
||||
<string>6B324B51111C1AC800EBD2FD</string>
|
||||
<string>6B324B52111C1AC800EBD2FD</string>
|
||||
<string>6B324B71111C1C4F00EBD2FD</string>
|
||||
<string>6B324C45111C5C5A00EBD2FD</string>
|
||||
<string>6B324C92111C604500EBD2FD</string>
|
||||
<string>6B324CC3111C6F6300EBD2FD</string>
|
||||
<string>6B324CFA111C7B0900EBD2FD</string>
|
||||
<string>6B324D0F1121C78000EBD2FD</string>
|
||||
<string>6B324D101121C78000EBD2FD</string>
|
||||
<string>6B324D511121D61A00EBD2FD</string>
|
||||
@ -389,16 +386,23 @@
|
||||
<string>6B324F1E1125818400EBD2FD</string>
|
||||
<string>6B324F1F1125818400EBD2FD</string>
|
||||
<string>6B324F201125818400EBD2FD</string>
|
||||
<string>6B324F211125818400EBD2FD</string>
|
||||
<string>6B324F221125818400EBD2FD</string>
|
||||
<string>6B324F2E112584FB00EBD2FD</string>
|
||||
<string>6B324F3A1125891F00EBD2FD</string>
|
||||
<string>6B324F3B1125891F00EBD2FD</string>
|
||||
<string>6B324F3C1125891F00EBD2FD</string>
|
||||
<string>6B324F3D1125891F00EBD2FD</string>
|
||||
<string>6B324F4911258C7000EBD2FD</string>
|
||||
<string>6B324F4A11258C7000EBD2FD</string>
|
||||
<string>6B324F4B11258C7000EBD2FD</string>
|
||||
<string>6B324F5011258F7F00EBD2FD</string>
|
||||
<string>6B324F541125904E00EBD2FD</string>
|
||||
<string>6B324F551125904E00EBD2FD</string>
|
||||
<string>6B324F9A11259A5800EBD2FD</string>
|
||||
<string>6B324F9B11259A5800EBD2FD</string>
|
||||
<string>6B324FC711259FFA00EBD2FD</string>
|
||||
<string>6B324FC811259FFA00EBD2FD</string>
|
||||
</array>
|
||||
<key>nextStack</key>
|
||||
<array>
|
||||
<string>6B324FC911259FFA00EBD2FD</string>
|
||||
</array>
|
||||
<key>prevStack</key>
|
||||
<array>
|
||||
@ -470,17 +474,13 @@
|
||||
<string>6B324B57111C1AC800EBD2FD</string>
|
||||
<string>6B324B5C111C1AC800EBD2FD</string>
|
||||
<string>6B324B5E111C1AC800EBD2FD</string>
|
||||
<string>6B324B5F111C1AC800EBD2FD</string>
|
||||
<string>6B324B61111C1AC800EBD2FD</string>
|
||||
<string>6B324B62111C1AC800EBD2FD</string>
|
||||
<string>6B324B63111C1AC800EBD2FD</string>
|
||||
<string>6B324B64111C1AC800EBD2FD</string>
|
||||
<string>6B324B65111C1AC800EBD2FD</string>
|
||||
<string>6B324B66111C1AC800EBD2FD</string>
|
||||
<string>6B324B67111C1AC800EBD2FD</string>
|
||||
<string>6B324B6C111C1B7500EBD2FD</string>
|
||||
<string>6B324B74111C1C4F00EBD2FD</string>
|
||||
<string>6B324B75111C1C4F00EBD2FD</string>
|
||||
<string>6B324B7D111C1C8200EBD2FD</string>
|
||||
<string>6B324B82111C1CF000EBD2FD</string>
|
||||
<string>6B324BBD111C4C2B00EBD2FD</string>
|
||||
@ -562,7 +562,6 @@
|
||||
<string>6B324ED41125770F00EBD2FD</string>
|
||||
<string>6B324EE91125799900EBD2FD</string>
|
||||
<string>6B324EEA1125799900EBD2FD</string>
|
||||
<string>6B324F1711257F9A00EBD2FD</string>
|
||||
<string>6B324F251125818400EBD2FD</string>
|
||||
<string>6B324F261125818400EBD2FD</string>
|
||||
<string>6B324F271125818400EBD2FD</string>
|
||||
@ -573,10 +572,13 @@
|
||||
<string>6B324F401125891F00EBD2FD</string>
|
||||
<string>6B324F411125891F00EBD2FD</string>
|
||||
<string>6B324F421125891F00EBD2FD</string>
|
||||
<string>6B324F431125891F00EBD2FD</string>
|
||||
<string>6B324F441125891F00EBD2FD</string>
|
||||
<string>6B324F4C11258C7000EBD2FD</string>
|
||||
<string>6B324F4D11258C7000EBD2FD</string>
|
||||
<string>6B324F5211258F7F00EBD2FD</string>
|
||||
<string>6B324F571125904E00EBD2FD</string>
|
||||
<string>6B324F581125904E00EBD2FD</string>
|
||||
<string>6BF7C4661115C514002B3F46</string>
|
||||
<string>6B324B5F111C1AC800EBD2FD</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
@ -590,18 +592,18 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {876, 514}}</string>
|
||||
<string>{{0, 0}, {876, 561}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>11 76 1256 702 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>514pt</string>
|
||||
<string>561pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>142pt</string>
|
||||
<string>95pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
@ -669,7 +671,7 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {876, 115}}</string>
|
||||
<string>{{10, 27}, {876, 68}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>11 76 1256 702 0 0 1280 778 </string>
|
||||
</dict>
|
||||
@ -754,12 +756,12 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {1256, 132}}</string>
|
||||
<string>{{0, 0}, {1256, 173}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXDebugCLIModule</string>
|
||||
<key>Proportion</key>
|
||||
<string>132pt</string>
|
||||
<string>173pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>ContentConfiguration</key>
|
||||
@ -778,8 +780,8 @@
|
||||
<string>yes</string>
|
||||
<key>sizes</key>
|
||||
<array>
|
||||
<string>{{0, 0}, {628, 82}}</string>
|
||||
<string>{{628, 0}, {628, 82}}</string>
|
||||
<string>{{0, 0}, {628, 115}}</string>
|
||||
<string>{{628, 0}, {628, 115}}</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>VerticalSplitView</key>
|
||||
@ -794,8 +796,8 @@
|
||||
<string>yes</string>
|
||||
<key>sizes</key>
|
||||
<array>
|
||||
<string>{{0, 0}, {1256, 82}}</string>
|
||||
<string>{{0, 82}, {1256, 442}}</string>
|
||||
<string>{{0, 0}, {1256, 115}}</string>
|
||||
<string>{{0, 115}, {1256, 368}}</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
@ -815,7 +817,7 @@
|
||||
<key>DebugSTDIOWindowFrame</key>
|
||||
<string>{{200, 200}, {500, 300}}</string>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 137}, {1256, 524}}</string>
|
||||
<string>{{0, 178}, {1256, 483}}</string>
|
||||
<key>PBXDebugSessionStackFrameViewKey</key>
|
||||
<dict>
|
||||
<key>DebugVariablesTableConfiguration</key>
|
||||
@ -828,13 +830,13 @@
|
||||
<real>398</real>
|
||||
</array>
|
||||
<key>Frame</key>
|
||||
<string>{{628, 0}, {628, 82}}</string>
|
||||
<string>{{628, 0}, {628, 115}}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXDebugSessionModule</string>
|
||||
<key>Proportion</key>
|
||||
<string>524pt</string>
|
||||
<string>483pt</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Name</key>
|
||||
|
@ -235,19 +235,19 @@
|
||||
6B137C7D0F7FCBE800459200 /* Recast */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
6B137C820F7FCC1100459200 /* Recast.cpp */,
|
||||
6B137C830F7FCC1100459200 /* RecastContour.cpp */,
|
||||
6B137C850F7FCC1100459200 /* RecastFilter.cpp */,
|
||||
6B137C860F7FCC1100459200 /* RecastLog.cpp */,
|
||||
6B137C870F7FCC1100459200 /* RecastMesh.cpp */,
|
||||
6B137C880F7FCC1100459200 /* RecastRasterization.cpp */,
|
||||
6B137C890F7FCC1100459200 /* RecastRegion.cpp */,
|
||||
6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */,
|
||||
6B137C7E0F7FCBFE00459200 /* Recast.h */,
|
||||
6B137C800F7FCBFE00459200 /* RecastLog.h */,
|
||||
6B137C810F7FCBFE00459200 /* RecastTimer.h */,
|
||||
6B624169103434880002E346 /* RecastMeshDetail.cpp */,
|
||||
6B137C820F7FCC1100459200 /* Recast.cpp */,
|
||||
6B137C860F7FCC1100459200 /* RecastLog.cpp */,
|
||||
6B137C8A0F7FCC1100459200 /* RecastTimer.cpp */,
|
||||
6B137C880F7FCC1100459200 /* RecastRasterization.cpp */,
|
||||
6B137C850F7FCC1100459200 /* RecastFilter.cpp */,
|
||||
6BF7C4531115C277002B3F46 /* RecastArea.cpp */,
|
||||
6B137C890F7FCC1100459200 /* RecastRegion.cpp */,
|
||||
6B137C830F7FCC1100459200 /* RecastContour.cpp */,
|
||||
6B137C870F7FCC1100459200 /* RecastMesh.cpp */,
|
||||
6B624169103434880002E346 /* RecastMeshDetail.cpp */,
|
||||
);
|
||||
name = Recast;
|
||||
sourceTree = "<group>";
|
||||
|
Loading…
x
Reference in New Issue
Block a user