Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parFrançoise Bossé Modifié depuis plus de 5 années
1
Comment dessiner une sphère à l’aide de polygones
2
Solution #1 : Utiliser les équations paramétriques d’une sphère
3
Solution #2 : Subdiviser un tétraèdre centré à l’origine
4
Regardons tout d’abord la solution #1…
5
Solution #1 : Utiliser les équations paramétriques d’une sphère => voir
6
Principe : 1- on fixe l’angle Φ à 0 2- on incrémente Φ d’un certain ΔΦ 3- on fait varier l’angle ϴ entre 0 et 2π 4- on boucle à l’étape 2 tant que Φ ≤ π
7
On retrouve ce principe de construction dans le code de la fonction uvSphere( ) du fichier basic-object-IFS.js
8
var du = 2. Math. PI/slices; var dv = Math
var du = 2*Math.PI/slices; var dv = Math.PI/stacks; var i,j,u,v,x,y,z;var indexV = 0; var indexT = 0; for (i = 0; i <= stacks; i++) { v = -Math.PI/2 + i*dv; for (j = 0; j <= slices; j++) { u = j*du; x = Math.cos(u)*Math.cos(v); y = Math.sin(u)*Math.cos(v); z = Math.sin(v); vertices[indexV] = radius*x; normals[indexV++] = x; vertices[indexV] = radius*y; normals[indexV++] = y; vertices[indexV] = radius*z; normals[indexV++] = z; texCoords[indexT++] = j/slices; texCoords[indexT++] = i/stacks; } } Notes importantes: a) dans cette fonction, on a inversé les équations de x et de y par rapport aux équations paramétriques habituelles b) en conséquence, l’incrémentation des angles s’effectue différemment => ne change cependant rien à l’apparence finale de la sphère
9
Pour ce qui est de la solution #2 (soit subdiviser un tétraèdre centré à l’origine), on utilise un algorithme que vous connaissez bien… (avec une petite modification)
10
function tetrahedron(a, b, c, d, n) { divideTriangle(a, c, b, n); divideTriangle(d, b, c, n); divideTriangle(a, b, d, n); divideTriangle(a, d, c, n); } function divideTriangle(a, b, c, count) { if ( count > 0 ) { var ab = mix( a, b, 0.5); var ac = mix( a, c, 0.5); var bc = mix( b, c, 0.5); ab = normalize(ab, true); ac = normalize(ac, true); bc = normalize(bc, true); divideTriangle( a, ab, ac, count - 1 ); divideTriangle( ab, b, bc, count - 1 ); divideTriangle( bc, c, ac, count - 1 ); divideTriangle( ab, bc, ac, count - 1 ); } else { triangle( a, b, c ); } }
11
function triangle(a, b, c) {
normalsArray.push(a); normalsArray.push(b); normalsArray.push(c); pointsArray.push(a); pointsArray.push(b); pointsArray.push(c); index += 3; }
12
Exemple de résultat:
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.