void rcMarkWalkableTrianglesCos(rcContext* /*ctx*/, const float walkableSlopeCos, const float* verts, int /*nv*/, const int* tris, int nt, unsigned char* areas) { float norm[3]; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); // Check if the face is walkable. if (norm[1] > walkableSlopeCos) areas[i] = RC_WALKABLE_AREA; } }
void rcMarkWalkableTriangles(const float walkableSlopeAngle, const float* verts, int /*nv*/, const int* tris, int nt, unsigned char* flags) { const float walkableThr = cosf(walkableSlopeAngle/180.0f*(float)M_PI); float norm[3]; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); // Check if the face is walkable. if (norm[1] > walkableThr) flags[i] |= RC_WALKABLE; } }
/// @par /// /// Only sets the area id's for the unwalkable triangles. Does not alter the /// area id's for walkable triangles. /// /// See the #rcConfig documentation for more information on the configuration parameters. /// /// @see rcHeightfield, rcClearUnwalkableTriangles, rcRasterizeTriangles void rcClearUnwalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const float* verts, int nv, const int* tris, int nt, navAreaMask* areaMasks) { const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); float norm[3]; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); // Check if the face is walkable. if (norm[1] <= walkableThr) areaMasks[ i ] = RC_NULL_AREA; } }
/// @par /// /// Only sets the aread id's for the unwalkable triangles. Does not alter the /// area id's for walkable triangles. /// /// See the #rcConfig documentation for more information on the configuration parameters. /// /// @see rcHeightfield, rcClearUnwalkableTriangles, rcRasterizeTriangles void rcClearUnwalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const dtCoordinates* verts, int /*nv*/, const int* tris, int nt, unsigned char* areas) { rcIgnoreUnused(ctx); const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); dtCoordinates norm; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(verts[tri[0]], verts[tri[1]], verts[tri[2]], norm); // Check if the face is walkable. if (norm.Y() <= walkableThr) areas[i] = RC_NULL_AREA; } }
/// @par /// /// Only sets the area id's for the walkable triangles. Does not alter the /// area id's for unwalkable triangles. /// /// See the #rcConfig documentation for more information on the configuration parameters. /// /// @see rcHeightfield, rcClearUnwalkableTriangles, rcRasterizeTriangles void rcMarkWalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const float* verts, int /*nv*/, const int* tris, int nt, unsigned char* areas) { rcIgnoreUnused(ctx); const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); float norm[3]; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); // Check if the face is walkable. if (norm[1] > walkableThr) areas[i] = RC_WALKABLE_AREA; } }
void rcClearUnwalkableTriangles(rcContext* /*ctx*/, const float walkableSlopeAngle, const float* verts, int /*nv*/, const int* tris, int nt, unsigned char* areas) { // TODO: VC complains about unref formal variable, figure out a way to handle this better. // rcAssert(ctx); const float walkableThr = cosf(walkableSlopeAngle / 180.0f*RC_PI); float norm[3]; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i * 3]; calcTriNormal(&verts[tri[0] * 3], &verts[tri[1] * 3], &verts[tri[2] * 3], norm); // Check if the face is walkable. if (norm[1] <= walkableThr) areas[i] = RC_NULL_AREA; } }
/// @par /// /// Only sets the aread id's for the walkable triangles. Does not alter the /// area id's for unwalkable triangles. /// /// See the #rcConfig documentation for more information on the configuration parameters. /// /// @see rcHeightfield, rcClearUnwalkableTriangles, rcRasterizeTriangles void rcMarkWalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const dtCoordinates* verts, int /*nv*/, const int* tris, int nt, unsigned char* areas) { rcIgnoreUnused(ctx); const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); dtCoordinates norm; for (int i = 0; i < nt; ++i) { const int* tri = &tris[i*3]; calcTriNormal(verts[tri[0]], verts[tri[1]], verts[tri[2]], norm); //#ifdef MODIFY_VOXEL_FLAG const bool terrain = tri[0] < RC_MAX_GROUND_FLOOR_VERTICES && tri[1] < RC_MAX_GROUND_FLOOR_VERTICES && tri[2] < RC_MAX_GROUND_FLOOR_VERTICES; //#endif // MODIFY_VOXEL_FLAG // Check if the face is walkable. #ifdef MODIFY_VOXEL_FLAG if( walkableThr < norm.Y() ) { areas[i] = terrain ? RC_TERRAIN_AREA | RC_WALKABLE_AREA : RC_OBJECT_AREA | RC_WALKABLE_AREA; } else { areas[i] = terrain ? RC_TERRAIN_AREA | RC_WALKABLE_AREA : RC_OBJECT_AREA | RC_UNWALKABLE_AREA;; } #else // MODIFY_VOXEL_FLAG if (norm[1] > walkableThr) { //areas[i] = RC_WALKABLE_AREA; areas[i] = terrain ? RC_WALKABLE_AREA : 1; } else { areas[i] = terrain ? RC_NULL_AREA : 2; } #endif // MODIFY_VOXEL_FLAG } }