/* Sphere                                       */
/*                                              */
/* Auteur: Nicolas JANEY                        */
/* nicolas.janey@univ-fcomte.fr                 */
/* Mars 2014                                    */

#ifndef ____SPHERE____
#define ____SPHERE____

#include "Objet.h"

class Pos3D;
class Materiel;
class RayonLumineux;
class Dir3D;

class Sphere : public Objet {

  public :
    double rayon;

  public :
    Sphere(void);
    Sphere(Pos3D *p,double r,Materiel *m);
    Sphere(Sphere *c);
    ~Sphere(void);

    void print(void);

    /* Fonction de determination de l'intersection  */
    /* entre un rayon lumineux et une sphere.       */
    /* Un int booleen en retour pour indiquer       */
    /* l'existence ou non d'une intersection.       */
    /* Un double en passage par adresse pour        */
    /* retourner la distance entre l'origine        */
    /* du rayon et l'intersection la plus proche    */
    /* de l'origine du rayon.                       */

    virtual int intersection(RayonLumineux *rl,double *d);

    /* Fonction de determination de l'existence     */
    /* d'une intersection entre un rayon lumineux   */
    /* et une sphere.                               */
    /* Un int booleen en retour.                    */

    virtual int intersection(RayonLumineux *rl);

    /* Fonction de calcul de la normale exterieure  */
    /* en un point d'une sphere                     */

    virtual void calculNormale(Dir3D *d,Pos3D *p);

    virtual void modeliseOpenGL(void);

    virtual Sphere *clone(void);
};

#endif
