| |
Description : cette fonction convertit la <liste de facettes> au format obj, plus précisément les deux derniers arguments doivent être des variables, la variable <sommets> reçoit en sortie la liste des sommets (sans doublons) et la variable <facettes> reçoit la liste des facettes (séparées par la constante jump) comportant non pas les coordonnées des sommets, mais leur numéro d’apparition dans la liste des sommets. La fonction renvoie un complexe a + ib où a est le nombre de sommets et b le nombre de faces. Cette commande est utilisée dans les exports obj, geom et jvx.
Attention : pour un grand nombre de facettes (plusieurs milliers ou plus), cette commande prend un certain temps (compter 2 à 3mn pour environ 20000 facettes)!
Description : cette fonction convertit la <liste de facettes> au format obj, plus précisément les deux derniers arguments doivent être des variables, la variable <sommets> reçoit en sortie la liste des sommets (sans doublons) où chaque sommet est suivi de son vecteur unitaire normal (ce vecteur est la moyenne des vecteurs normaux aux facettes se partageant le sommet). La variable <facettes> reçoit la liste des facettes (séparées par la constante jump) comportant non pas les coordonnées des sommets, mais leur numéro d’apparition dans la liste des sommets. La fonction renvoie un complexe a+ib où a est le nombre de sommets et b le nombre de faces. Cette commande est utilisée dans les exports obj et geom.
Attention : pour un grand nombre de facettes (plusieurs milliers ou plus), cette commande prend un certain temps!
Exemple(s) : l’exécution de la commande :
renvoie la valeur 4+4*i, ce qui signifie 4 sommets et 4 facettes. La variable S contient en sortie la liste :
[0, 0, -0.57735026918962-0.57735026918962*i, -0.57735026918962,
3*i, 0, -0.87287156094397 +0.43643578047198*i, -0.21821789023599,
2, 0, 0.50709255283711 -0.84515425472851*i, -0.1690308509457,
0, 1, -0.45584230583855 -0.56980288229819*i, 0.68376345875782],
et la variable F contient en sortie la liste : [1, 2, 3, jump, 1, 3, 4, jump, 3, 2, 4, jump, 1, 4, 2, jump].
| |
Description : une facette se présente sous la forme d’une liste de points 3D se terminant par la constante jump, ces points sont censés être coplanaires. Exemple : [ Origin, M(0,1,0), M(0,0,3), jump] est une facette. Les facettes sont orientées par l’ordre d’apparition des sommets.
Cette fonction coupe toutes les facettes de la liste avec le <plan>, celui-ci se présente sous la forme d’une liste du type [A,u] où A est un point3D et u également, cela représente le plan passant par A et normal au vecteur u. Seule la partie des facettes dans le demi-plan contenant u est conservée. La fonction renvoie la liste des facettes coupées.
| |
| |
| |
Description : cette fonction Proj3D calcule et renvoie la liste des projetés des points 3D sur le plan passant par l’origine et normal au vecteur Normal() de coordonnées (sin(φ)cos(𝜃),sin(φ)sin(𝜃),cos(φ)) [dirigé vers l’observateur]. La liste de points 3D peut contenir la constante de saut jump, elle sera recopiée dans le résultat.
| |
Il y a deux types de projection : orthographique et centrale. On change de mode avec la commande ModelView.
| |
Exemple(s) : lecture d’un fichier triceratops.obj (chargé à cette adresse :
L’image est obtenue à partir d’une capture (bouton snapshot) avec un export eps avant une conversion png.
| |
Description : une facette se présente sous la forme d’une liste de points 3D se terminant par la constante jump, ces points sont censés être coplanaires. Exemple : [ Origin, M(0,1,0), M(0,0,3), jump] est une facette. Les facettes sont orientées par l’ordre d’apparition des sommets.
Cette fonction classe les facettes de la plus éloignée à la plus proche de l’observateur (c’est la cote du centre de gravité sur l’axe dirigé vers l’observateur qui est pris en compte), et renvoie la liste classée qui en résulte (la liste originale n’est pas modifiée).
L’argument optionnel est un complexe de la forme (0/1)+i*(0/1).
Si la partie réelle vaut 1 : les facettes non visibles sont éliminées du tri. Une facette est visible lorsque son vecteur unitaire normal (son sens est déterminé par l’orientation de la facette) est de « même sens » que le vecteur unitaire dirigé vers l’observateur (produit scalaire positif avec le vecteur n()).
Si la partie réelle vaut 0 : toutes les facettes sont triées.
Si la partie imaginaire vaut 1 : à chaque facette est attribué un coefficient (produit scalaire entre le vecteur unitaire normal à la facette et Normal() qui sert à nuancer la couleur de remplissage lorsque FillStyle=full. Ce coefficient est stocké dans la partie imaginaire de la constante jump qui termine la facette. La fonction graphique Ligne lit ce coefficient, qui est entre 0 et 1 pour une facette visible, et multiplie les composantes rgb de la couleur de remplissage par ce coefficient avant de peindre.
Si la partie imaginaire vaut 0 : la couleur de remplissage ne sera pas nuancée.
Par défaut, l’argument optionnel est nul.