+ // a ray inside the sphere will not intersect on its way out
+ bool intersectRay(const Ray<D>& ray, typename Ray<D>::Intersection& hit)
+ {
+ Vector b = point - ray.point;
+ Scalar z = cml::dot(b, ray.direction);
+
+ // check if the ball is behind the ray
+ if (z < SCALAR(0.0)) return false;
+
+ Scalar d2 = cml::dot(b, b) - z*z;
+ Scalar r2 = radius * radius;
+
+ // check for an intersection
+ if (d2 > r2) return false;
+
+ hit.distance = z - std::sqrt(r2 - d2);
+ if (hit.distance < SCALAR(0.0)) return false;
+
+ Vector surfacePoint;
+ ray.solve(surfacePoint, hit.distance);
+ hit.normal = surfacePoint - point;
+ return true;
+ }
+
+
+ //void encloseVertices(const Vector vertices[], unsigned count);
+
+ //void draw(Scalar alpha = 0.0) const;
+ //bool isVisible(const Frustum& frustum) const;
+
+void encloseVertices(const Vector vertices[], unsigned count)
+{
+ // TODO
+}
+
+void draw(Scalar alpha = 0.0) const;
+//{
+ //GLUquadricObj* sphereObj = gluNewQuadric();
+ //gluQuadricDrawStyle(sphereObj, GLU_LINE);
+
+ //glPushMatrix();
+
+ //glTranslate(point);
+ //gluSphere(sphereObj, GLdouble(radius), 16, 16);
+
+ //glPopMatrix();
+
+ //gluDeleteQuadric(sphereObj);
+//}
+
+bool isVisible(const Frustum& frustum) const
+{
+ return true;
+}