X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FLine.hh;h=f8a2b66111f34a6de84a480fe461cd118064b77e;hp=7902ea90d969e2a6c7170f9f970c25f215613eb1;hb=76b3f4be992514a740ac03cdbdd57844142a0b4c;hpb=b714ba98cb92a1be42acba91d44fe5bfb0783a3b diff --git a/src/Moof/Line.hh b/src/Moof/Line.hh index 7902ea9..f8a2b66 100644 --- a/src/Moof/Line.hh +++ b/src/Moof/Line.hh @@ -38,7 +38,7 @@ struct Line : public Drawable, public Shape a(point1), b(point2) {} - bool intersectRay(const Ray<2>& ray, Ray<2>::Intersection& hit) const + bool intersectRay(const Ray<2>& ray, Ray<2>::Contact& hit) const { // solve: Cx + r*Dx = Ax + s(Bx - Ax) // Cy + r*Dy = Ay + s(By - Ay) @@ -79,6 +79,8 @@ struct Line : public Drawable, public Shape hit.distance = -(a[0] * (ray.point[1] - b[1]) + b[0] * (a[1] - ray.point[1]) + ray.point[0] * (b[1] - a[1])) / denom; + + // check if the intersection is behind the ray if (hit.distance < SCALAR(0.0)) return false; Vector normal = cml::perp(a - b); @@ -98,15 +100,41 @@ struct Line : public Drawable, public Shape }; +typedef Line<2> Line2; +typedef Line<3> Line3; + + template -struct Polygon : public Shape +struct Polygon : public Drawable, public Shape { typedef cml::vector< Scalar, cml::fixed > Vector; Vector points[N]; + + Polygon() {} + + bool intersectRay(const Ray& ray, typename Ray::Contact& hit) + { + return false; + } + + void draw(Scalar alpha = 0.0) const + { + Mf::Texture::resetBind(); + glBegin(GL_POLYGON); + for (int i = 0; i < D; ++i) + { + glVertex(points[0]); + } + glEnd(); + } }; +typedef Polygon<2,3> Triangle2; +typedef Polygon<3,3> Triangle3; + + } // namespace Mf #endif // _MOOF_LINE_HH_