* lower Winding_Clip ON_EPSILON to play with weird brushes w/o error
This commit is contained in:
parent
2f867c99d9
commit
ab0f376d4a
|
|
@ -188,22 +188,19 @@ void WindingVertex_ClassifyPlane( const Vector3& vertex, const Plane3& plane, br
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_EPSILON ON_EPSILON
|
const double ON_EPSILON_CLIP = 1.0 / ( 1 << 12 );
|
||||||
const double DEBUG_EPSILON_SQUARED = DEBUG_EPSILON * DEBUG_EPSILON;
|
|
||||||
|
|
||||||
#define WINDING_DEBUG 0
|
|
||||||
|
|
||||||
/// \brief Clip \p winding which lies on \p plane by \p clipPlane, resulting in \p clipped.
|
/// \brief Clip \p winding which lies on \p plane by \p clipPlane, resulting in \p clipped.
|
||||||
/// If \p winding is completely in front of the plane, \p clipped will be identical to \p winding.
|
/// If \p winding is completely in front of the plane, \p clipped will be identical to \p winding.
|
||||||
/// If \p winding is completely in back of the plane, \p clipped will be empty.
|
/// If \p winding is completely in back of the plane, \p clipped will be empty.
|
||||||
/// If \p winding intersects the plane, the edge of \p clipped which lies on \p clipPlane will store the value of \p adjacent.
|
/// If \p winding intersects the plane, the edge of \p clipped which lies on \p clipPlane will store the value of \p adjacent.
|
||||||
void Winding_Clip( const FixedWinding& winding, const Plane3& plane, const Plane3& clipPlane, std::size_t adjacent, FixedWinding& clipped ){
|
void Winding_Clip( const FixedWinding& winding, const Plane3& plane, const Plane3& clipPlane, std::size_t adjacent, FixedWinding& clipped ){
|
||||||
PlaneClassification classification = Winding_ClassifyDistance( plane3_distance_to_point( clipPlane, winding.back().vertex ), ON_EPSILON );
|
PlaneClassification classification = Winding_ClassifyDistance( plane3_distance_to_point( clipPlane, winding.back().vertex ), ON_EPSILON_CLIP );
|
||||||
PlaneClassification nextClassification;
|
PlaneClassification nextClassification;
|
||||||
// for each edge
|
// for each edge
|
||||||
for ( std::size_t next = 0, i = winding.size() - 1; next != winding.size(); i = next, ++next, classification = nextClassification )
|
for ( std::size_t next = 0, i = winding.size() - 1; next != winding.size(); i = next, ++next, classification = nextClassification )
|
||||||
{
|
{
|
||||||
nextClassification = Winding_ClassifyDistance( plane3_distance_to_point( clipPlane, winding[next].vertex ), ON_EPSILON );
|
nextClassification = Winding_ClassifyDistance( plane3_distance_to_point( clipPlane, winding[next].vertex ), ON_EPSILON_CLIP );
|
||||||
const FixedWindingVertex& vertex = winding[i];
|
const FixedWindingVertex& vertex = winding[i];
|
||||||
|
|
||||||
// if first vertex of edge is ON
|
// if first vertex of edge is ON
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user