Représentation frontière (3D) Représentation frontière (3D)
-- 2 2 ième ième partie partie --
Rappels
Structures Polyèdres et Triangulations Interrogation du modèle Brep
Opérations booléennes, Opérations booléennes,
transformations géométriques Parties cachées
O.Stab 2019
Produit Vectoriel (3D) Produit Vectoriel (3D)
V U W
r r
r = ∧
Rappels de géométrie (1)
W w Wr r
r = Wr = Ur Vr sin(θ)
=
z y x
u u u U
r
U r V
r W
r
θ
−
=
−
=
−
=
=
z y y
x z
z x x
z y
y z z
y x
v u v
u w
v u v
u w
v u v
u w
W
. .
. .
. .
Produit scalaire (3D) Produit scalaire (3D)
Rappels de géométrie (2)
V U w
r r
= .
U r
) cos(θ V
U w
r
= r
V V V
r r r
2 .
= V U w=t *
Projection d’un vecteur V sur l’axe ur
=
=
z y x
z y x
z y
z x
z
z y y
x y
z x y
x x
u
u w
u w
u w
v v v
u u
u u
u
u u u
u u
u u u
u u
V P
. . .
. .
. .
. .
*
2 2
2
x
y P
O
ur V r
θ
Écriture matricielle de la projection :
z z y
y x
x v u v u v
u
w = . + . + . u
V
Vr r r ) cos(
'= θ
' V
r
z
ur
Projection d’un vecteur V sur l’axe u
.
Produit mixte (3D) Produit mixte (3D)
Rappels de géométrie (3)
) .(U V W
m
r r
r ∧
=
Écriture matricielle :
V r
P2 P3
P
=
∧
z z
z
y y
y
x x
x
v u
w
v u
w
v u
w Det V
U
W.( ) r r
r
x y
θ
W U r
r P2
P4
Le plan Le plan
Représentation algébrique (RA) ?
Calcul de la RA à partir de 3 points ?
2. Représentation informatique
2. Représentation informatique
#VRML V2.0 utf8
…
Geometry IndexedFaceSet { ccw TRUE
solid TRUE convex TRUE
coord Coordinate { point [
Description des
Description des polyèdres polyèdres
X3 Y3 Z3 X4Y4 Z4
Face-based data structure (edge-based data structure)
Indications
2 blocs : les points et les faces
coord Coordinate { point [
# Coordonnees des points X1Y1 Z1
X2Y2 Z2
… ]}
coordIndex [
# Les faces 1 2 3 4 -1
…
Exemple de format de données de type : X3D, VRML, Inventor…
f1
X1 Y1 Z1 X2 Y2 Z2
Limitations
Représentation
Représentation informatique informatique
f1 a4
a3
a1
a2
s3 s1
s4
s2 a7
F = { f1,f2…f6} A = { a1, a2…a12} S = { s1,s2…s8 } interne, Cas 3D
Edge-based data structure (face-based data structure)
f2
f3 a1
a5 s7
s2 a6
a7
a10
Relations :
v F A S
b(v) = {f , f …f }
Représentation
Représentation informatique informatique
f1 a4
a3
a1
a2
s3 s1
s4
s2 a7
F = { f1,f2…f6} A = { a1, a2…a12} S = { s1,s2…s8 } Edge-based data structure (face-based data structure)
f2
f3 a1
a5 s7
s2
s6 s5
a6
a9
a7
a10
Relations :
v F A S
b(v) = {f1, f2…f6}
b(f3) = {a2, a6, a10, a7} b(a6) = {s6,s2}
Représentation
Représentation informatique informatique
f1 a4
a3
a1
a2
s3 s1
s4
s2 a7
F = { f1,f2…f6} A = { a1, a2…a12} S = { s1,s2…s8 } Edge-based data structure (face-based data structure)
…
f2
f3 a1
a5 s7
s2 a6
a7
a10
Relations : s6 dans a6, s dans a …
Représentation
Représentation informatique informatique
DECL : Double Edged Connected List
(DCEL, winged-edge)
Edge-based data structure (face-based data structure)
HDS : Half-edge Data Structure
c.interne->interne
c.interne
CGAL, OpenMesh...
Triangulations frontières
Triangulations frontières
Structure de données Structure de données
1,7,2
1 7
2 2,0,6
0 2
Face-based data structure (edge-based data structure)
1 7
6
Algo de parcours ?
EXERCICE : décrire le tétra.
EXERCICE : décrire le tétra.
dans la structure de données dans la structure de données
4
3
ITRNOE ITRTRI
1
2 3
COORD NOETRI
Faces planes et/ou courbes Faces planes et/ou courbes
n1
Surface plane Surface courbe
n1
n2 n3
Combien d’information faut-il stocker dans le 1er modèle ?
PovRay
PovRay : Triangulation : Triangulation
mesh {
PovRay
« smooth_triangle »
Ni3
Ni2 Ni1
i
mesh {
triangle { <X11, Y11, Z11>, <X12, Y12, Z12>, <X13, Y13, Z13>
[texture { nom_texture }] } smooth_triangle {
Formats … Formats …
solid name
STL
OFF
OFF
# cube.obj
# list of vertices
OBJ
#VRML V2.0 utf8
…
Geometry IndexedFaceSet {
# optionnel mais utile : ccw TRUE
solid TRUE convex TRUE
coord Coordinate { point [
WRL
https://poly.google.com/
solid name
…facet normal ninjnk outer loop
vertex v1xv1yv1z vertex v2xv2yv2z vertex v3xv3yv3z endloop
endfacet
…endsolid name
OFF # cube.off
# A cube 8 6 12 1.0 0.0 1.0 0.0 1.0 1.0
-1.0 0.0 1.0 0.0 -1.0 1.0 1.0 0.0 -1.0 0.0 1.0 -1.0 -1.0 0.0 -1.0 0.0 -1.0 -1.0 4 0 1 2 3 4 7 4 0 3 4 4 5 1 0 4 5 6 2 1 4 3 2 6 7 4 6 5 4 7
# cube.obj
# list of vertices v 1.0 0.0 1.0 v 0.0 1.0 1.0 v -1.0 0.0 1.0 v 0.0 -1.0 1.0 v 1.0 0.0 -1.0 v 0.0 1.0 -1.0 v -1.0 0.0 -1.0 v 0.0 -1.0 -1.0
…# list of faces f 1 2 3 4 f 8 5 1 4
…
# mais aussi :
# f node/norm/texture f 6/4/1 2/5/3 7/6/8 6/4/5
point [
# Coordonnees des points X1Y1 Z1
X2Y2 Z2
… ]}
coordIndex [
# Les faces 1 2 3 4 -1 5 6 2 1 -1
… ] }
EXERCICE : EXERCICE :
Étapes de l’algorithme de
reconstruction d’une frontière à partir du format STL
solid name
STL
solid name
…facet normal ninjnk outer loop
vertex v1xv1yv1z vertex v2xv2yv2z vertex v3xv3yv3z endloop
endfacet
…endsolid name
EXERCICE : fichier «
EXERCICE : fichier « OFF OFF » »
Représentez par un dessin la
géométrie correspondant au fichier
« OFF »
OFF OFF # cube.off
# A cube 8 6 12 1.0 0.0 1.0 0.0 1.0 1.0
-1.0 0.0 1.0 0.0 -1.0 1.0 1.0 0.0 -1.0 0.0 1.0 -1.0 -1.0 0.0 -1.0 0.0 -1.0 -1.0 4 0 1 2 3 4 7 4 0 3 4 4 5 1 0 4 5 6 2 1 4 3 2 6 7 4 6 5 4 7
EXERCICE : structure de données EXERCICE : structure de données
?
?
Quelles structure de données minimales peut-on utiliser pour représenter :
?
?
Contraintes
Contraintes d d ’’intégrité intégrité
Cas 2D
Intersection réduites aux sommets communs
Cas 3D
• Intersection réduites aux arêtes communes
Cas 3D
sommets communs Un sommet appartient exactement à 2 arêtes
Existe une orientation des arêtes telle que chaque
sommet est origine d’une arête et extrémité d’une autre.
arêtes communes
• Une arête appartient exactement à 2 faces
• Existe une orientation des faces telle que chaque arête est parcourue dans un sens puis dans l’autre.
3. Interrogation du
3. Interrogation du modèle modèle
?
Interrogation du
Interrogation du modèle modèle (3D) (3D)
Intersection d ’une droite avec le modèle ? Un point (x,y) est-il à l ’intérieur ou
l ’extérieur du polyèdre ? Volume d’un polyèdre ? Volume d’un polyèdre ?
...
X,Y,ZIntersection d’une Droite avec un Plan Intersection d’une Droite avec un Plan
Rappels de géométrie (1)
PI
Intersection d’une Droite avec un Plan Intersection d’une Droite avec un Plan
Plan : Ax+By+Cz+D=0 Droite : x(t)=a1t+a2
y(t)=b1t+b2 z(t)=c1t+c2
Rappels de géométrie (1)
PI
z(t)=c1t+c2
=> équation linéaire : ti = Aa1+Bb1+Cc1
Aa2+Bb2+Cc2+D PI (x(ti), y(ti), z(ti) )
Intersection
Intersection d’une d’une droite droite avec un
avec un Polyèdre Polyèdre (1) (1)
METHODE :
Projeter le polygone dans le plan perpendiculaire à la droite
Pour toutes les faces du polyèdre…
Intersection ?
Intersection
Intersection d’une d’une droite droite avec un
avec un Polyèdre Polyèdre (2) (2)
Intersection ? 1) Intersection de la droite avec le plan
2) Projection du polygone et du point
d’intersection dans un plan
3) Point dans polygone ?
Point
Point dans dans polyèdre polyèdre ? ?
PRINCIPE : idem 2D, parité du nombre d’intersection avec une ½ droite
• METHODE :
• Projection des faces
• Traitement des cas singuliers
Point dans polyèdre ? Point dans polyèdre ?
Cas singuliers
Intersection ? SUR A
Point dans polyèdre ? Point dans polyèdre ?
Cas singuliers
Intersection : OUI
Point dans polyèdre ? Point dans polyèdre ?
Cas singuliers
Point dans polygone ?
Intersection : OUI DANS
Point dans polygone ?
Point dans polyèdre ? Point dans polyèdre ?
Cas singuliers
Point dans polygone ? Point dans polygone ?
Intersection : NON HORS
Point dans polyèdre ? Point dans polyèdre ?
Point dans polygone replié ?
3
1
Point
Point dans dans polyèdre polyèdre (1) (1)
Point
Point dans dans polyèdre polyèdre (2) (2)
Hors
Point
Point dans dans polyèdre polyèdre (3) (3)
Dans
Point
Point dans dans polyèdre polyèdre (4) (4)
Hors
Calcul
Calcul du volume du volume
0,0 0,1
1,0 z1
z3 z2
0,0 0,1
x = x(u,v) y = y(u,v)
(u,v) dans [0:1]x[0:1]
et u+v <= 1
EXERCICE : Calcul du volume EXERCICE : Calcul du volume
Algorithme :
Approche pratique
Détection/Calculer/Eviter des Détection/Calculer/Eviter des
intersections entre polyèdres intersections entre polyèdres
Hierarchical AABB-Tree in CGAL
Minkowski 3D in CGAL
4. Modification du
4. Modification du modèle modèle
Niveau élémentaire :
◦ Opérateurs d ’Euler f – a + s = 2cc Niveau supérieur :
◦ Transformations géométriques
◦ Opérations booléennes
◦ Dilatation/erosion :
Somme de Minkowski
A B
AnB
4.1. Transformations
4.1. Transformations
Transformations Transformations
Rotations :
( ) ( ) ( )
( ) ( )
=
ψ ψ
ψ 0 1 0
sin 0
cos
Ry
( ) ( ) ( )
( ) ( )
−
= θ θ
θ 0 cos sin 0 0
1 Rx
( )
−
=
1 0
0
0 )
cos(
) sin(
0 ) sin(
) cos(
α α
α α
z α R
Composition : est la rotation
d’angles d’Euler (lacet, tangage, roulis).
Associatif mais pas commutatif…
( ) ( )
−sin ψ 0 cos ψ
( ) ( )
0 sin θ cos θ
( ) ( ) ( )
α y ψ x θz R R
R
( ) ( ) ( )
α , ψ , θRotation autour d’un axe Rotation autour d’un axe
=
2 2
2
. .
. .
. .
z y
z x
z
z y y
x y
z x y
x x
N
n n
n n
n
n n n
n n
n n n
n n
A
0 − n n
=
z y x
n n n N
y
N
P
O’ P’
θ
I-AN= -BN2
−
−
−
=
0 0
0
x y
x z
y z
N
n n
n n
n n
B
M = A + cos(θ).(I-A ) + sin(θ).B
x y
O
Rotation autour d’un axe Rotation autour d’un axe
=
z y x
n n n N
y
N
P
O’ P’
θ
OP = OO’ + O’P OP = OO’ + ||O’P|| i
OP’ = OO’ + cos(θ) ||O’P|| i + sin(θ) ||O’P|| j OP’ = OO’ + cos(θ) O’P + sin(θ) N n O’P
Approche vectorielle et démonstration
M = AN + cos(θ).(I-AN) + sin(θ).BN z
x y
AN est la matrice de projection sur l’axe N,
O OP’ = OO’ + cos(θ)(OP-OO’) + sin(θ) N n OP
OO’ = (N.OP) N = AN.OP = BN OP
Géométrie projective et Géométrie projective et coordonnées homogènes coordonnées homogènes
Le calcul doit être rapide :
Projection (œil) = plan de la caméra
La composition dépend du type de
La composition dépend du type de
transformation
Coordonnées Homogènes Coordonnées Homogènes
z
= 1
y x
Pc
= y Pc x
Coordonnées Homogènes géométrie projective d=2
( ) ( ) ( )
( ) ( )
−
=
1 0
0
0 cos
sin
0 sin
cos
θ θ
θ θ
z θ R
=
1 /
1 / y Pc x
Matrice de transformation dans Rd+1
z=1
x y z
Pc
0 0 1
=
1 0
0
1 0
0 1
y x
T t
t
M
1
y
Pc ‘ = MT * Pc x
Translation et mise à l’échelle (d=3) Translation et mise à l’échelle (d=3)
=
1 0
0 0
1 0
0
0 1
0
0 0
1
z y x
T t
t t M
P M
P ' =
T
= 0 0 0
0 0
0
y x
S S
M
P ' = M
SP
MT *(x,y,z,1) = (x+tx,y+ty,z+tz,1) (x+tx,y+ty,z+tz)
Rotations (d=3) Rotations (d=3)
x y
ψ
( )
( ) ( )
( ) ( )
−
=
1 0 0
0
0 1 0
0
0 0 cos
sin
0 0 sin
cos
φ φ
φ φ
z φ R
( ) ( )
cos ψ 0 sin ψ 0
z
θ
xφ ( ) ( ) ( )
= −
1 0
0 0
0 cos
0 sin
0 0
1 0
ψ ψ ψ
Ry
( ) ( ) ( )
( ) ( )
= −
1 0
0 0
0 cos
sin 0
0 sin
cos 0
0 0
0 1
θ θ
θ θ θ
Rx
( )
'
z.
y.
xP = RP = R R R P
3,3
0
31
H t
R T M
=
ur
Matrice homogène de Matrice homogène de transformation
transformation
'
H.
P = M P
1
1 3,3
3
( ) .
0 1
T T
H t
R R T
M
−
= −
−
ur
Projections Projections
focale plan image
Projection orthographique Projection orthographique
Image
[0,0,f]
Image Plan y
x z
Repère caméra (œil)
=
1 0 0 0
0 0 0
0 0 1 0
0 0 0 1
M per f
[0,0,f]
x,y,f x,y,z
Projection perspective Projection perspective
Image y
x z
[0,0,f]
F=[0,0,0]
Image Plan
F=[0,0,0]
Repère caméra (œil)
[0,0,f]
Mper *(x,y,z,1) = (x,y,z,z/f) qui donne en 3D : (x*(f/z), y*(f/z), f)
=
1 0 0
0
0 1
0 0
0 0
1 0
0 0
0 1
f
M per x(f/z),y(f/z),f x,y,z
4.2. Opérations booléennes 4.2. Opérations booléennes
= TRUE
Opérations booléennes Opérations booléennes
Fr(B)dans A
Fr(A)dans B Fr(B)hors A Fr(AnB) = Fr(AuB) =
Fr(A) hors B Fr(A), Fr(B)
AnB AuB
A B
Opérations booléennes Opérations booléennes régularisées
régularisées
Opérations booléennes Opérations booléennes régularisées
régularisées
Fr(A)dans B Fr(B)sur- A
Fr(B)dans A
Fr(A)dans B
Fr(AnB) = Fr(A) dans B + Fr(B) dans A + Fr(B) sur + A
Opérations booléennes Opérations booléennes régularisées
régularisées
Fr(AuB) = Fr(A) hors B + Fr(B) hors A + Fr(B) sur +A Fr(A-B) = Fr(A) hors B + Fr(B) dans A + Fr(B) sur - A
Opérations booléennes Opérations booléennes
Exemple 3D
Opérations booléennes Opérations booléennes
Exemple 3D
Opérations booléennes Opérations booléennes
Exemple 3D Fr(A) hors B
Fr(B) hors A
Fr(A) dans B
Fr(B) dans A
Fr(B) sur+A
Fr(A) sur+ B
Opérations booléennes Opérations booléennes
1. Calcul des intersections
2. Classification des parties de frontière
Schéma de l’algorithme 2D et 3D
2. Classification des parties de frontière 3. Suppression des parties inutiles
4. Collage des parties restantes
Étape 1 : Arêtes = intersection des faces
Opérations booléennes
Opérations booléennes
Étape 2 : Classification des portions de frontière
Opérations booléennes Opérations booléennes
Fr(A) hors B
Fr(B) hors A
Fr(A) sur+ B
Fr(B) sur+A
Étape 3 : Suppression des portions de frontière
Opérations booléennes Opérations booléennes
Fr(A) hors B
Fr(B) hors A
Fr(AuB) = Fr(A) hors B + Fr(B) hors A + Fr(B) sur +A Fr(A) sur+ B
Fr(B) dans A
Fr(B) sur+A
Étape 4 : Collage des portions de frontière
Opérations booléennes Opérations booléennes
Fr(A) hors B
Fr(B) hors A
Fr(A) sur+ B
Fr(B) sur+A
EXERCICE :
EXERCICE : Sketchup Sketchup boolean boolean
Quelles parties de frontières sont conservées ?
A
B B
Domaine
Complétude
Propriétés
Propriétés du du modèle modèle
Complétude Unicité
Manipulation
MAYA® …
Exemples (libraires & toolkits) Exemples (libraires & toolkits)
GPL
http://www.cgal.org
Computational Geometry Algorithms Library
LGPL*
FreeCAD
LGPL*
LGPL*
http://www.opencascade.org
LGPL*
http://gts.sourceforge.net/
GNU Triangulated Surfaces Library https://www.openmesh.org/
LGPL*
Visualisation d’une triangulation (3D) : les parties cachées
1. Triangulations : structure, calcul des normales & affichage
2. Rotation et translations
3. « Backface culling »
SCILAB
Une introduction par la pratique
TP 2 : Parties cachées
4. Parties cachées : algorithme du peintre
Le
Le Clipping Clipping et le Back face et le Back face culling
culling
Face vue
Face non-vue Clipping
Face non-vue
Back plane
Front plane
Dans quel cas est-ce suffisant ?
Algorithmes à liste de priorité Algorithmes à liste de priorité (Algorithme du peintre)
(Algorithme du peintre)
Liste ordonnée de facettes
◦ trier les facettes suivant leur profondeur : Z-max
◦
facettes (planes)
◦ afficher en Z-max décroissant
◦ ambiguïtés : problème du recouvrement cyclique…
T3
Hypothèses pour le TP Hypothèses pour le TP
Projection orthographique
Pas de recouvrement cycliques
Triplot2d(XYZcoord, itrnoe, couleur) est fournie : projection des triangles dans le plan image
Y Z
X Y
Z
X Z
Rcaméra
Rscene TODO :« Backface culling » Algorithme du peintre