]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Line.hh
game loop tweaks; shapes hierarchy defined
[chaz/yoink] / src / Moof / Line.hh
index 7902ea90d969e2a6c7170f9f970c25f215613eb1..f8a2b66111f34a6de84a480fe461cd118064b77e 100644 (file)
@@ -38,7 +38,7 @@ struct Line : public Drawable, public Shape<D>
                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<D>
                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<D>
 };
 
 
+typedef Line<2>                Line2;
+typedef Line<3>                Line3;
+
+
 template <int D, int N>
-struct Polygon : public Shape<D>
+struct Polygon : public Drawable, public Shape<D>
 {
        typedef cml::vector< Scalar, cml::fixed<D> > Vector;
 
        Vector  points[N];
+
+       Polygon() {}
+
+       bool intersectRay(const Ray<D>& ray, typename Ray<D>::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_
This page took 0.020063 seconds and 4 git commands to generate.