public class SRay extends java.lang.Object implements java.lang.Comparable<SRay>
La classe SRay représente un rayon pouvant réaliser une intersection avec une géométrie.
Cette classe implémente l'interface Comparable (permettant les usages des méthodes de triage des librairies de base de java). La comparaison sera effectuée sur la valeur du champ local t qui représente le temps afin d'intersecter une géométrie. S'il n'y a pas d'intersection, la valeur de t sera égale à l'infini.
Modifier and Type | Field and Description |
---|---|
static double |
DEFAULT_REFRACTIVE_INDEX
La constante 'DEFAULT_REFRACTIV_INDEX' correspond à la valeur de l'indice de réfraction par défaut où un rayon voyage.
|
static double |
MINIMUM_EPSILON
La constante 'MINIMUM_EPSILON' correspond à la plus petite valeur du temps mininal de parcours qu'un rayon doit effectuer avant de pouvoir intersecter une géométrie.
|
Constructor and Description |
---|
SRay(SVector3d origin,
SVector3d direction,
double refractive_index)
Constructeur d'un rayon dont l'objectif sera de tenter d'intersecter une géométrie.
|
Modifier and Type | Method and Description |
---|---|
boolean |
asIntersected()
Méthode pour déterminer si le rayon a effectué une intersection avec une géométrie.
|
boolean |
asUV()
Méthode pour déterminer si le rayon intersecté possède une coordonnée de uv de texture.
|
int |
compareTo(SRay ray) |
boolean |
equals(java.lang.Object obj) |
SVector3d |
getDirection()
Méthode pour obtenir la direction du rayon.
|
static double |
getEpsilon()
Méthode pour obtenir la valeur d'epsilon présentement en vigueur pour les calculs d'intersection entre les rayons et les géométries.
|
SGeometry |
getGeometry()
Méthode pour obtenir la géométrie qui est en intersection avec le rayon.
|
SVector3d |
getIntersectionPosition()
Méthode pour obtenir la position de l'intersection entre le rayon et la géométrie.
|
SVector3d |
getNormal()
Méthode pour obtenir la normal à la surface de la géométrie en intersection avec le rayon.
|
SVector3d |
getOrigin()
Méthode pour obtenir l'origine du rayon.
|
SVector3d |
getPosition(double t_value)
Méthode pour obtenir la position d'un rayon après un déplacement de celui-ci.
|
double |
getRefractiveIndex()
Méthode pour obtenir l'indice de réfraction du milieu dans lequel le rayon voyage.
|
double |
getT()
Méthode pour obtenir le temps (ou la distance puisque la direction est unitaire) afin de réaliser
une intersection entre le rayon et une géométrie.
|
SVectorUV |
getUV()
Méthode pour obtenir la coordonnée uv associée à l'intersection sur la géométrie.
|
SRay |
intersection(SGeometry geometry,
SVector3d normal,
double t,
boolean is_inside_intersection)
Méthode pour générer un rayon intersecté à partir d'un rayon lancée et de ses caractéristiques définissant l'intersection.
|
SRay |
intersection(SGeometry geometry,
SVector3d normal,
SVectorUV uv,
double t,
boolean is_inside_intersection)
Méthode pour générer un rayon intersecté à partir d'un rayon lancée et de ses caractéristiques définissant l'intersection.
|
boolean |
isInsideIntersection()
Méthode pour déterminer si le rayon a effectué une intersection de l'intérieur de la géométrie.
|
static void |
setEpsilon(double e)
Méthode pour définir le temps/distance minimal que doit effectuer un rayon afin de valider une intersection.
|
java.lang.String |
toString() |
public static final double MINIMUM_EPSILON
public static final double DEFAULT_REFRACTIVE_INDEX
public SRay(SVector3d origin, SVector3d direction, double refractive_index) throws SConstructorException
origin
- - L'origine du rayon.direction
- - La direction du rayon.refractive_index
- - L'indice de réfraction du milieu où voyage le rayon.SConstructorException
- Si la direction du rayon correspond à un vecteur nul.public static void setEpsilon(double e) throws SRuntimeException
e
- - La valeur d'epsilon.SRuntimeException
- Si la nouvelle valeur d'epsilon est inférieure à la valeur minimale acceptée par la classe.MINIMUM_EPSILON
public static double getEpsilon()
public SVector3d getOrigin()
public SVector3d getDirection()
public SVector3d getPosition(double t_value)
t_value
- - Le temps/distance à écouler dans le déplacement du rayon.public boolean asIntersected()
public boolean isInsideIntersection() throws SRuntimeException
SRuntimeException
- Si le rayon n'a pas effectué d'intersection.public double getT()
public double getRefractiveIndex()
public SVector3d getIntersectionPosition() throws SRuntimeException
SRuntimeException
- S'il n'y a pas eu d'intersection avec ce rayon, le point d'intersection est indéterminé.public SGeometry getGeometry() throws SRuntimeException
SRuntimeException
- S'il n'y a pas eu d'intersection avec ce rayon, la géométrie est indéterminée.public SVector3d getNormal() throws SRuntimeException
SRuntimeException
- S'il n'y a pas eu d'intersection avec ce rayon, la normale est indéterminée.public SVectorUV getUV() throws SRuntimeException
SRuntimeException
- S'il n'y a pas eu d'intersection avec ce rayon, la coordonnée uv est indéterminée.public boolean asUV() throws SRuntimeException
SRuntimeException
- Si le rayon n'a pas été intersecté, il ne peut pas y avoir de coordonnée uv d'attribuée au rayon.public SRay intersection(SGeometry geometry, SVector3d normal, double t, boolean is_inside_intersection) throws SRuntimeException
geometry
- - La géométrie qui est en intersection avec le rayon.normal
- - La normale à la surface de la géométrie intersectée.t
- - Le temps requis pour se rendre au lieu de l'intersection sur la géométrie.is_inside_intersection
- - Détermine si l'intersection se fait par l'intérieur de la géométrie (nécessaire s'il y a de la réfraction à évaluer).SRuntimeException
- S'il y a déjà eu une intersection avec ce rayon.public SRay intersection(SGeometry geometry, SVector3d normal, SVectorUV uv, double t, boolean is_inside_intersection) throws SRuntimeException
geometry
- - La géométrie qui est en intersection avec le rayon.normal
- - La normale à la surface de la géométrie intersectée.uv
- - La coordonnée uv associée à l'intersection.t
- - Le temps requis pour se rendre au lieu de l'intersection sur la géométrie.is_inside_intersection
- - Détermine si l'intersection se fait par l'intérieur de la géométrie (nécessaire s'il y a de la réfraction à évaluer).SRuntimeException
- S'il y a déjà eu une intersection avec ce rayon.public int compareTo(SRay ray)
compareTo
in interface java.lang.Comparable<SRay>
public java.lang.String toString()
toString
in class java.lang.Object
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object