forked from mirror/DotRecast
012 -> xyz
This commit is contained in:
parent
3ecfa5d9fd
commit
6ead61661d
|
@ -46,9 +46,9 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
float s0 = (i & 1) != 0 ? 1f : -1f;
|
||||
float s1 = (i & 2) != 0 ? 1f : -1f;
|
||||
float s2 = (i & 4) != 0 ? 1f : -1f;
|
||||
float vx = center[0] + s0 * halfEdges[0][0] + s1 * halfEdges[1][0] + s2 * halfEdges[2][0];
|
||||
float vy = center[1] + s0 * halfEdges[0][1] + s1 * halfEdges[1][1] + s2 * halfEdges[2][1];
|
||||
float vz = center[2] + s0 * halfEdges[0][2] + s1 * halfEdges[1][2] + s2 * halfEdges[2][2];
|
||||
float vx = center.x + s0 * halfEdges[0].x + s1 * halfEdges[1].x + s2 * halfEdges[2].x;
|
||||
float vy = center.y + s0 * halfEdges[0].y + s1 * halfEdges[1].y + s2 * halfEdges[2].y;
|
||||
float vz = center.z + s0 * halfEdges[0].z + s1 * halfEdges[1].z + s2 * halfEdges[2].z;
|
||||
bounds[0] = Math.Min(bounds[0], vx);
|
||||
bounds[1] = Math.Min(bounds[1], vy);
|
||||
bounds[2] = Math.Min(bounds[2], vz);
|
||||
|
@ -71,7 +71,7 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
Vector3f[] halfEdges =
|
||||
{
|
||||
Vector3f.Zero,
|
||||
Vector3f.Of(up[0], up[1], up[2]),
|
||||
Vector3f.Of(up.x, up.y, up.z),
|
||||
Vector3f.Zero
|
||||
};
|
||||
RecastVectors.normalize(ref halfEdges[1]);
|
||||
|
@ -79,16 +79,16 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
RecastVectors.normalize(ref halfEdges[0]);
|
||||
RecastVectors.cross(ref halfEdges[2], halfEdges[0], up);
|
||||
RecastVectors.normalize(ref halfEdges[2]);
|
||||
halfEdges[0][0] *= extent[0];
|
||||
halfEdges[0][1] *= extent[0];
|
||||
halfEdges[0][2] *= extent[0];
|
||||
halfEdges[1][0] *= extent[1];
|
||||
halfEdges[1][1] *= extent[1];
|
||||
halfEdges[1][2] *= extent[1];
|
||||
halfEdges[2][0] *= extent[2];
|
||||
halfEdges[2][1] *= extent[2];
|
||||
halfEdges[2][2] *= extent[2];
|
||||
halfEdges[0].x *= extent.x;
|
||||
halfEdges[0].y *= extent.x;
|
||||
halfEdges[0].z *= extent.x;
|
||||
halfEdges[1].x *= extent.y;
|
||||
halfEdges[1].y *= extent.y;
|
||||
halfEdges[1].z *= extent.y;
|
||||
halfEdges[2].x *= extent.z;
|
||||
halfEdges[2].y *= extent.z;
|
||||
halfEdges[2].z *= extent.z;
|
||||
return halfEdges;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,9 +46,9 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
{
|
||||
return new float[]
|
||||
{
|
||||
Math.Min(start[0], end[0]) - radius, Math.Min(start[1], end[1]) - radius,
|
||||
Math.Min(start[2], end[2]) - radius, Math.Max(start[0], end[0]) + radius, Math.Max(start[1], end[1]) + radius,
|
||||
Math.Max(start[2], end[2]) + radius
|
||||
Math.Min(start.x, end.x) - radius, Math.Min(start.y, end.y) - radius,
|
||||
Math.Min(start.z, end.z) - radius, Math.Max(start.x, end.x) + radius, Math.Max(start.y, end.y) + radius,
|
||||
Math.Max(start.z, end.z) + radius
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,4 +72,4 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
c.rasterize(hf, telemetry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,9 +46,9 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
{
|
||||
return new float[]
|
||||
{
|
||||
Math.Min(start[0], end[0]) - radius, Math.Min(start[1], end[1]) - radius,
|
||||
Math.Min(start[2], end[2]) - radius, Math.Max(start[0], end[0]) + radius, Math.Max(start[1], end[1]) + radius,
|
||||
Math.Max(start[2], end[2]) + radius
|
||||
Math.Min(start.x, end.x) - radius, Math.Min(start.y, end.y) - radius,
|
||||
Math.Min(start.z, end.z) - radius, Math.Max(start.x, end.x) + radius, Math.Max(start.y, end.y) + radius,
|
||||
Math.Max(start.z, end.z) + radius
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,12 +44,12 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
{
|
||||
return new float[]
|
||||
{
|
||||
center[0] - radius,
|
||||
center[1] - radius,
|
||||
center[2] - radius,
|
||||
center[0] + radius,
|
||||
center[1] + radius,
|
||||
center[2] + radius
|
||||
center.x - radius,
|
||||
center.y - radius,
|
||||
center.z - radius,
|
||||
center.x + radius,
|
||||
center.y + radius,
|
||||
center.z + radius
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,4 +65,4 @@ namespace DotRecast.Detour.Dynamic.Colliders
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,9 +59,9 @@ namespace DotRecast.Detour.Dynamic
|
|||
config.detailSampleMaxError = voxelFile.detailSampleMaxError;
|
||||
builder = new RecastBuilder();
|
||||
navMeshParams = new NavMeshParams();
|
||||
navMeshParams.orig[0] = voxelFile.bounds[0];
|
||||
navMeshParams.orig[1] = voxelFile.bounds[1];
|
||||
navMeshParams.orig[2] = voxelFile.bounds[2];
|
||||
navMeshParams.orig.x = voxelFile.bounds[0];
|
||||
navMeshParams.orig.y = voxelFile.bounds[1];
|
||||
navMeshParams.orig.z = voxelFile.bounds[2];
|
||||
navMeshParams.tileWidth = voxelFile.cellSize * voxelFile.tileSizeX;
|
||||
navMeshParams.tileHeight = voxelFile.cellSize * voxelFile.tileSizeZ;
|
||||
navMeshParams.maxTiles = voxelFile.tiles.Count;
|
||||
|
@ -189,10 +189,10 @@ namespace DotRecast.Detour.Dynamic
|
|||
return _tiles.Values;
|
||||
}
|
||||
|
||||
int minx = (int)Math.Floor((bounds[0] - navMeshParams.orig[0]) / navMeshParams.tileWidth);
|
||||
int minz = (int)Math.Floor((bounds[2] - navMeshParams.orig[2]) / navMeshParams.tileHeight);
|
||||
int maxx = (int)Math.Floor((bounds[3] - navMeshParams.orig[0]) / navMeshParams.tileWidth);
|
||||
int maxz = (int)Math.Floor((bounds[5] - navMeshParams.orig[2]) / navMeshParams.tileHeight);
|
||||
int minx = (int)Math.Floor((bounds[0] - navMeshParams.orig.x) / navMeshParams.tileWidth);
|
||||
int minz = (int)Math.Floor((bounds[2] - navMeshParams.orig.z) / navMeshParams.tileHeight);
|
||||
int maxx = (int)Math.Floor((bounds[3] - navMeshParams.orig.x) / navMeshParams.tileWidth);
|
||||
int maxz = (int)Math.Floor((bounds[5] - navMeshParams.orig.z) / navMeshParams.tileHeight);
|
||||
List<DynamicTile> tiles = new List<DynamicTile>();
|
||||
for (int z = minz; z <= maxz; ++z)
|
||||
{
|
||||
|
@ -259,4 +259,4 @@ namespace DotRecast.Detour.Dynamic
|
|||
return _tiles.Values.Select(t => t.recastResult).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ namespace DotRecast.Detour.Dynamic
|
|||
{
|
||||
if (!rasterizedColliders.Contains(cid))
|
||||
{
|
||||
heightfield.bmax[1] = Math.Max(heightfield.bmax[1], c.bounds()[4] + heightfield.ch * 2);
|
||||
heightfield.bmax.y = Math.Max(heightfield.bmax.y, c.bounds()[4] + heightfield.ch * 2);
|
||||
c.rasterize(heightfield, telemetry);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,12 +103,12 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
foreach (RecastBuilderResult r in results)
|
||||
{
|
||||
f.tiles.Add(new VoxelTile(r.tileX, r.tileZ, r.getSolidHeightfield()));
|
||||
f.bounds[0] = Math.Min(f.bounds[0], r.getSolidHeightfield().bmin[0]);
|
||||
f.bounds[1] = Math.Min(f.bounds[1], r.getSolidHeightfield().bmin[1]);
|
||||
f.bounds[2] = Math.Min(f.bounds[2], r.getSolidHeightfield().bmin[2]);
|
||||
f.bounds[3] = Math.Max(f.bounds[3], r.getSolidHeightfield().bmax[0]);
|
||||
f.bounds[4] = Math.Max(f.bounds[4], r.getSolidHeightfield().bmax[1]);
|
||||
f.bounds[5] = Math.Max(f.bounds[5], r.getSolidHeightfield().bmax[2]);
|
||||
f.bounds[0] = Math.Min(f.bounds[0], r.getSolidHeightfield().bmin.x);
|
||||
f.bounds[1] = Math.Min(f.bounds[1], r.getSolidHeightfield().bmin.y);
|
||||
f.bounds[2] = Math.Min(f.bounds[2], r.getSolidHeightfield().bmin.z);
|
||||
f.bounds[3] = Math.Max(f.bounds[3], r.getSolidHeightfield().bmax.x);
|
||||
f.bounds[4] = Math.Max(f.bounds[4], r.getSolidHeightfield().bmax.y);
|
||||
f.bounds[5] = Math.Max(f.bounds[5], r.getSolidHeightfield().bmax.z);
|
||||
}
|
||||
|
||||
return f;
|
||||
|
@ -148,15 +148,15 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
{
|
||||
Heightfield heightfield = vt.heightfield();
|
||||
f.tiles.Add(new VoxelTile(vt.tileX, vt.tileZ, heightfield));
|
||||
f.bounds[0] = Math.Min(f.bounds[0], vt.boundsMin[0]);
|
||||
f.bounds[1] = Math.Min(f.bounds[1], vt.boundsMin[1]);
|
||||
f.bounds[2] = Math.Min(f.bounds[2], vt.boundsMin[2]);
|
||||
f.bounds[3] = Math.Max(f.bounds[3], vt.boundsMax[0]);
|
||||
f.bounds[4] = Math.Max(f.bounds[4], vt.boundsMax[1]);
|
||||
f.bounds[5] = Math.Max(f.bounds[5], vt.boundsMax[2]);
|
||||
f.bounds[0] = Math.Min(f.bounds[0], vt.boundsMin.x);
|
||||
f.bounds[1] = Math.Min(f.bounds[1], vt.boundsMin.y);
|
||||
f.bounds[2] = Math.Min(f.bounds[2], vt.boundsMin.z);
|
||||
f.bounds[3] = Math.Max(f.bounds[3], vt.boundsMax.x);
|
||||
f.bounds[4] = Math.Max(f.bounds[4], vt.boundsMax.y);
|
||||
f.bounds[5] = Math.Max(f.bounds[5], vt.boundsMax.z);
|
||||
}
|
||||
|
||||
return f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,9 +73,9 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
file.useTiles = buf.get() != 0;
|
||||
file.tileSizeX = buf.getInt();
|
||||
file.tileSizeZ = buf.getInt();
|
||||
file.rotation[0] = buf.getFloat();
|
||||
file.rotation[1] = buf.getFloat();
|
||||
file.rotation[2] = buf.getFloat();
|
||||
file.rotation.x = buf.getFloat();
|
||||
file.rotation.y = buf.getFloat();
|
||||
file.rotation.z = buf.getFloat();
|
||||
file.bounds[0] = buf.getFloat();
|
||||
file.bounds[1] = buf.getFloat();
|
||||
file.bounds[2] = buf.getFloat();
|
||||
|
@ -102,22 +102,22 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
int depth = buf.getInt();
|
||||
int borderSize = buf.getInt();
|
||||
Vector3f boundsMin = new Vector3f();
|
||||
boundsMin[0] = buf.getFloat();
|
||||
boundsMin[1] = buf.getFloat();
|
||||
boundsMin[2] = buf.getFloat();
|
||||
boundsMin.x = buf.getFloat();
|
||||
boundsMin.y = buf.getFloat();
|
||||
boundsMin.z = buf.getFloat();
|
||||
Vector3f boundsMax = new Vector3f();
|
||||
boundsMax[0] = buf.getFloat();
|
||||
boundsMax[1] = buf.getFloat();
|
||||
boundsMax[2] = buf.getFloat();
|
||||
boundsMax.x = buf.getFloat();
|
||||
boundsMax.y = buf.getFloat();
|
||||
boundsMax.z = buf.getFloat();
|
||||
if (isExportedFromAstar)
|
||||
{
|
||||
// bounds are local
|
||||
boundsMin[0] += file.bounds[0];
|
||||
boundsMin[1] += file.bounds[1];
|
||||
boundsMin[2] += file.bounds[2];
|
||||
boundsMax[0] += file.bounds[0];
|
||||
boundsMax[1] += file.bounds[1];
|
||||
boundsMax[2] += file.bounds[2];
|
||||
boundsMin.x += file.bounds[0];
|
||||
boundsMin.y += file.bounds[1];
|
||||
boundsMin.z += file.bounds[2];
|
||||
boundsMax.x += file.bounds[0];
|
||||
boundsMax.y += file.bounds[1];
|
||||
boundsMax.z += file.bounds[2];
|
||||
}
|
||||
|
||||
float cellSize = buf.getFloat();
|
||||
|
@ -139,4 +139,4 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
return file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,9 +51,9 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
write(stream, f.useTiles);
|
||||
write(stream, f.tileSizeX, byteOrder);
|
||||
write(stream, f.tileSizeZ, byteOrder);
|
||||
write(stream, f.rotation[0], byteOrder);
|
||||
write(stream, f.rotation[1], byteOrder);
|
||||
write(stream, f.rotation[2], byteOrder);
|
||||
write(stream, f.rotation.x, byteOrder);
|
||||
write(stream, f.rotation.y, byteOrder);
|
||||
write(stream, f.rotation.z, byteOrder);
|
||||
write(stream, f.bounds[0], byteOrder);
|
||||
write(stream, f.bounds[1], byteOrder);
|
||||
write(stream, f.bounds[2], byteOrder);
|
||||
|
@ -74,12 +74,12 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
write(stream, tile.width, byteOrder);
|
||||
write(stream, tile.depth, byteOrder);
|
||||
write(stream, tile.borderSize, byteOrder);
|
||||
write(stream, tile.boundsMin[0], byteOrder);
|
||||
write(stream, tile.boundsMin[1], byteOrder);
|
||||
write(stream, tile.boundsMin[2], byteOrder);
|
||||
write(stream, tile.boundsMax[0], byteOrder);
|
||||
write(stream, tile.boundsMax[1], byteOrder);
|
||||
write(stream, tile.boundsMax[2], byteOrder);
|
||||
write(stream, tile.boundsMin.x, byteOrder);
|
||||
write(stream, tile.boundsMin.y, byteOrder);
|
||||
write(stream, tile.boundsMin.z, byteOrder);
|
||||
write(stream, tile.boundsMax.x, byteOrder);
|
||||
write(stream, tile.boundsMax.y, byteOrder);
|
||||
write(stream, tile.boundsMax.z, byteOrder);
|
||||
write(stream, tile.cellSize, byteOrder);
|
||||
write(stream, tile.cellHeight, byteOrder);
|
||||
byte[] bytes = tile.spanData;
|
||||
|
@ -92,4 +92,4 @@ namespace DotRecast.Detour.Dynamic.Io
|
|||
stream.Write(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,20 +54,20 @@ namespace DotRecast.Detour.Dynamic
|
|||
|
||||
private float? traverseTiles(Vector3f start, Vector3f end)
|
||||
{
|
||||
float relStartX = start[0] - origin[0];
|
||||
float relStartZ = start[2] - origin[2];
|
||||
float relStartX = start.x - origin.x;
|
||||
float relStartZ = start.z - origin.z;
|
||||
int sx = (int)Math.Floor(relStartX / tileWidth);
|
||||
int sz = (int)Math.Floor(relStartZ / tileDepth);
|
||||
int ex = (int)Math.Floor((end[0] - origin[0]) / tileWidth);
|
||||
int ez = (int)Math.Floor((end[2] - origin[2]) / tileDepth);
|
||||
int ex = (int)Math.Floor((end.x - origin.x) / tileWidth);
|
||||
int ez = (int)Math.Floor((end.z - origin.z) / tileDepth);
|
||||
int dx = ex - sx;
|
||||
int dz = ez - sz;
|
||||
int stepX = dx < 0 ? -1 : 1;
|
||||
int stepZ = dz < 0 ? -1 : 1;
|
||||
float xRem = (tileWidth + (relStartX % tileWidth)) % tileWidth;
|
||||
float zRem = (tileDepth + (relStartZ % tileDepth)) % tileDepth;
|
||||
float tx = end[0] - start[0];
|
||||
float tz = end[2] - start[2];
|
||||
float tx = end.x - start.x;
|
||||
float tz = end.z - start.z;
|
||||
float xOffest = Math.Abs(tx < 0 ? xRem : tileWidth - xRem);
|
||||
float zOffest = Math.Abs(tz < 0 ? zRem : tileDepth - zRem);
|
||||
tx = Math.Abs(tx);
|
||||
|
@ -112,17 +112,17 @@ namespace DotRecast.Detour.Dynamic
|
|||
Heightfield hf = heightfieldProvider.Invoke(x, z);
|
||||
if (null != hf)
|
||||
{
|
||||
float tx = end[0] - start[0];
|
||||
float ty = end[1] - start[1];
|
||||
float tz = end[2] - start[2];
|
||||
float[] entry = { start[0] + tMin * tx, start[1] + tMin * ty, start[2] + tMin * tz };
|
||||
float[] exit = { start[0] + tMax * tx, start[1] + tMax * ty, start[2] + tMax * tz };
|
||||
float relStartX = entry[0] - hf.bmin[0];
|
||||
float relStartZ = entry[2] - hf.bmin[2];
|
||||
float tx = end.x - start.x;
|
||||
float ty = end.y - start.y;
|
||||
float tz = end.z - start.z;
|
||||
float[] entry = { start.x + tMin * tx, start.y + tMin * ty, start.z + tMin * tz };
|
||||
float[] exit = { start.x + tMax * tx, start.y + tMax * ty, start.z + tMax * tz };
|
||||
float relStartX = entry[0] - hf.bmin.x;
|
||||
float relStartZ = entry[2] - hf.bmin.z;
|
||||
int sx = (int)Math.Floor(relStartX / hf.cs);
|
||||
int sz = (int)Math.Floor(relStartZ / hf.cs);
|
||||
int ex = (int)Math.Floor((exit[0] - hf.bmin[0]) / hf.cs);
|
||||
int ez = (int)Math.Floor((exit[2] - hf.bmin[2]) / hf.cs);
|
||||
int ex = (int)Math.Floor((exit[0] - hf.bmin.x) / hf.cs);
|
||||
int ez = (int)Math.Floor((exit[2] - hf.bmin.z) / hf.cs);
|
||||
int dx = ex - sx;
|
||||
int dz = ez - sz;
|
||||
int stepX = dx < 0 ? -1 : 1;
|
||||
|
@ -142,8 +142,8 @@ namespace DotRecast.Detour.Dynamic
|
|||
{
|
||||
if (sx >= 0 && sx < hf.width && sz >= 0 && sz < hf.height)
|
||||
{
|
||||
float y1 = start[1] + ty * (tMin + t) - hf.bmin[1];
|
||||
float y2 = start[1] + ty * (tMin + Math.Min(tMaxX, tMaxZ)) - hf.bmin[1];
|
||||
float y1 = start.y + ty * (tMin + t) - hf.bmin.y;
|
||||
float y2 = start.y + ty * (tMin + Math.Min(tMaxX, tMaxZ)) - hf.bmin.y;
|
||||
float ymin = Math.Min(y1, y2) / hf.ch;
|
||||
float ymax = Math.Max(y1, y2) / hf.ch;
|
||||
Span span = hf.spans[sx + sz * hf.width];
|
||||
|
@ -181,4 +181,4 @@ namespace DotRecast.Detour.Dynamic
|
|||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue