use fourth point for compute_planar_bounds().

This commit is contained in:
David Rose 2012-02-07 20:34:05 +00:00
parent b7a51b133e
commit e125604c50

View File

@ -602,10 +602,10 @@ merge(const PfmFile &other) {
// mostly-planar surface. // mostly-planar surface.
// //
// This algorithm works by sampling the (square) // This algorithm works by sampling the (square)
// sample_radius pixels at three of the four point_dist // sample_radius pixels at the four point_dist corners
// corners around the center (cx - pd, cx + pd) and so // around the center (cx - pd, cx + pd) and so on, to
// on, to determine the plane of the surface. Then all // approximate the plane of the surface. Then all of
// of the points are projected into that plane and the // the points are projected into that plane and the
// bounding volume within that plane is determined. // bounding volume within that plane is determined.
// //
// point_dist and sample_radius are in UV space, i.e. in // point_dist and sample_radius are in UV space, i.e. in
@ -613,10 +613,11 @@ merge(const PfmFile &other) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
PT(BoundingHexahedron) PfmFile:: PT(BoundingHexahedron) PfmFile::
compute_planar_bounds(double point_dist, double sample_radius) const { compute_planar_bounds(double point_dist, double sample_radius) const {
LPoint3 p0, p1, p2; LPoint3 p0, p1, p2, p3;
compute_sample_point(p0, 0.5 + point_dist, 0.5 - point_dist, sample_radius); compute_sample_point(p0, 0.5 + point_dist, 0.5 - point_dist, sample_radius);
compute_sample_point(p1, 0.5 + point_dist, 0.5 + point_dist, sample_radius); compute_sample_point(p1, 0.5 + point_dist, 0.5 + point_dist, sample_radius);
compute_sample_point(p2, 0.5 - point_dist, 0.5 + point_dist, sample_radius); compute_sample_point(p2, 0.5 - point_dist, 0.5 + point_dist, sample_radius);
compute_sample_point(p3, 0.5 - point_dist, 0.5 - point_dist, sample_radius);
LPoint3 normal; LPoint3 normal;
@ -628,9 +629,13 @@ compute_planar_bounds(double point_dist, double sample_radius) const {
normal[1] += p1[2] * p2[0] - p1[0] * p2[2]; normal[1] += p1[2] * p2[0] - p1[0] * p2[2];
normal[2] += p1[0] * p2[1] - p1[1] * p2[0]; normal[2] += p1[0] * p2[1] - p1[1] * p2[0];
normal[0] += p2[1] * p0[2] - p2[2] * p0[1]; normal[0] += p2[1] * p3[2] - p2[2] * p3[1];
normal[1] += p2[2] * p0[0] - p2[0] * p0[2]; normal[1] += p2[2] * p3[0] - p2[0] * p3[2];
normal[2] += p2[0] * p0[1] - p2[1] * p0[0]; normal[2] += p2[0] * p3[1] - p2[1] * p3[0];
normal[0] += p3[1] * p0[2] - p3[2] * p0[1];
normal[1] += p3[2] * p0[0] - p3[0] * p0[2];
normal[2] += p3[0] * p0[1] - p3[1] * p0[0];
normal.normalize(); normal.normalize();