Principales Modifications à N3D
Beaucoup de fichiers ont été modifiés pour permettre
la compilation sous GCC en Linux et Solaris.
- modification minuscule/majuscule des #includes et noms de fichier.
- Résolution de conflis de méthodes ayant le même
nom d'une classe. Ex:
class A {...};
class B{
A a;
A() { return A;}
...
};
Ne compile pas avec GCC, mais compile avec VC++.
--> Ce type de problème apparaissait dans les classes Fenetre,...
Rayon.h/cpp
- Modification du prototype:
booleen TraceRayons(const Camera& pv, Objet *scene, const
entier& resx, const entier& resy, char fichier[], int antialiasinglevel=1
);
FenetrePrincipale.cpp
- Ajout de menus "Tracé de rayons AA1", AA2, AA3, AA4. Pertinant
???
- Touche F5 fait un tracé de rayons sans anti-aliasing.
- FenetrePrincipale::OnChangeSize(int w, int h)
- w/h est maintenant proportionnel à ((Pmax-Pmin)/(Hmax-Hmin)
Classe Objet (objet.h / cpp)
protected:
int
numeroPiece0; // Numero de la premiere piece de l'objet
Couleur* radiosite;
// Tableau de radiosite
public:
int getNumeroPiece0() const;
void setNumeroPiece0(int numeropiece0);
virtual int getNombrePieces()
const;
virtual void centrePiece(int numero, point&,
vecteur& v1, vecteur& v2, vecteur& vn);
virtual int getNumeroPiece(const
point& p); //retourne le numero de piece local où se trouve
le point p
void setRadiosite(int numero,
const Couleur& c); //affecte une radiosite pour un numero de piece local
virtual void mettreRadioDansEmis(const point&, Attributs&
c); //pour tracé de rayons
virtual double calculAirePiece(int numero, const Transformation&)
const;
- Par défault: numeroPiece0=-1 et getNombrePieces() retourne 0.
Les classes dérivées modifirons ces attributs.
- Par défault: radiosite=NULL.
Classe quadrilatère (quadrilatere.h / cpp)
Classe Polygone (polygone.h/cpp)
- Redéfinition des méthodes:
public:
virtual int getNombrePieces()
const;
virtual void centrePiece(int numero, point&,
vecteur& v1, vecteur& v2, vecteur& vn);
virtual int getNumeroPiece(const
point& p);
virtual double calculAirePiece(int numero, const Transformation&)
const;
virtual void mettreRadioDansEmis(const point&, Attributs&
c); //pour tracé de rayons
Tiens compte de radiosite si pFenAff3D->Display()->Settings()->UtiliserRadiosite()=VRAI
et si la radiosité a été calculée (tableau radiosites!=NULL)
Classe Display (displayopengl.h/cpp)
- void Polygone(int n, double x[], double y[], double z[],
double nx[], double ny[], double nz[],
const Couleur*,
const Attributs& a);
Classe Attributs (attr.h/cpp)
Division de la classe en 2 classe:
- Classe BaseAttributs qui contient seulement les coefficient.
- Classe Attributs qui hérite de BaseAttributs et contient les
transformation
Pertinant ?? (était utile pour projet IFT528)
Classe Couleur (couleur.h/cpp)
- Ajout d'operator *=
- Ajout d'une méthode luminosité(). Retourne (R+G+B)/3.
io.cpp
- Prise en charge des objets Quadrilatere.
parser.cpp
- Support des commentaires C++ (// et /* */).
- { } sont encore supportés.
inter.cpp
- Ajout d'un paramètre au premier Obj_inter():
booleen Objet_Inter (Objet& o, const point&
p, const vecteur& v, reel *k, vecteur *vn, Couleurs* c, int* numeroPiece=NULL
);
Si numeroPiece=NULL, le numéro de pièce n'est pas calculé.
Garde la compatibilité avec ce qui a été fait antérieurement.
Avec une autre fonction, déterminé le numré pièece
en même temps que les attributs n'est plus utilisé. Garder???
- Ajout d'une nouvelle fonction:
booleen Objet_InterPiece(Objet& o, const point& p,
const vecteur& v, int* numero_piece);
Ne fait que déterminé le numéro de pièce touchée
par le rayon. Ne calcul pas les Attributs/Couleurs.
20 à 40% plus rapide!
Les rayons passes aux travers les faces arrières.
Nouveau programme : tracerayon.cpp
- Ne fait pas d'affichage... juste un tracé de rayons.
- Usage en ligne de commande:
- tracerayon [-radiosite] nomscene X Y [anti-aliasing level]
- si on spécifie l'option -radiosite, la radiosité
(GS) sera préalablement calculé. (Et les lumières désactivées).