vers l'index général de l'aide

vers l'index des isosurfaces

les isosurfaces - opérateurs

Voici un répertoire de toutes les opérations mathématiques qui peuvent être contenues dans une définition de fonction d'isosurface. Attention, ces opérations sont spécifiques aux isosurfaces, et diffèrent parfois de la syntaxe générale de POV-Ray concernant les opérateurs.

constantes

x, y, z : les trois plans de l'espace
r, s : (inusités)
clock : notre bonne vieille variable externe
pi : 3.14159..

Nous avons déjà utilisé x, y et z, et l'utilisation des autres constantes semble assez évidente.

//une sphère dont le rayon croît avec clock
isosurface { 
  function {x^2 + y^2 + z^2 - clock} 
  threshold 0   
  contained_by {box {-1,1}}
}

opérateurs arithmétiques

+ : addition
- : soustraction
* : multiplication
/ : division
^ : puissance
% : modulo
sqrt() : racine carrée
sqr() : élever au carré (puissance 2)
cub() : élever au cube (puissance 3)
exp() : exponentielle
ln () : logarithme neperien

Nous avons déjà utilisé la plupart de ces opérateurs.

//un.. euh.. machin à base de racines carrées
isosurface { 
  function {sqrt(x) + sqrt(y) + z*1} 
  threshold 0   
  contained_by {box {-1,1}}
}

opérateurs logiques

& : ET logique (correspond à une intersection CSG)
| : OU logique (correspond à une union CSG)

//l'union d'une sphère et d'un plan
#declare Rayon=1;
isosurface { 
  function {(x*0 + y*1 + z*0) | (x*x + y*y + z*z - Rayon)} 
  threshold 0   
  contained_by {box {-1,1}}
}

opérateurs conditionnels

min(a,b) : retourne la plus petite des deux valeurs
max(a,b) : retourne la plus grande des deux valeurs
if(a, b, c) : si a>0, retourne b, sinon retourne c

trigonométrie

cos(), cosh(), acos(), acosh() : cosinus, etc.. (en radians)
sin(), sinh(), asin(), asinh() : sinus, etc..
tan(), tanh(), atan(), atanh() : tangente, etc..
atan2(a, b) : arctangente de b/a, précis même quand a=0
degrees(a) : convertir les radians en degrés
radians(a) : convertir les degrés en radians

Ici, ça devient très amusant, on va jouer à faire des vagues !

//une vague.  remarquez que cette fonction se base sur un plan y, puisqu'il faut
//bien avoir quelque chose à moduler.
isosurface { 
  function {cos(x) + y*1 + z*0} 
  threshold 0   
  contained_by {box {-1,1}}
  
  pigment {Check1}
  finish {phong .7}
}

Pour contrôler l'allure de la vague, il faut intervenir autour du cosinus avec des coefficients. Un coefficient appliqué à la constante du plan ajustera la fréquence, tandis qu'un coefficient appliqué au cosinus lui-même ajustera l'amplitude.

#declare A=.1;
#declare F=10;

isosurface { 
  function {cos(x*F)*A + y*1 + z*0} 
  threshold 0   
  contained_by {box {-1,1}}
}

arrondis, etc..

abs() : valeur absolue
ceil(a) : arrondi (entier sup.) de a
floor(a) : arrondi (entier inf.) de a

bruit 3D

noise3d(x, y, z) : produit un bruit fractal tridimensionnel pour perturber les surfaces
(un peu désuet depuis que l'on peut utiliser des pigments comme fonctions).

//une sphere perturbée...
isosurface { 
  function {x^2 + y^2 + z^2 - Rayon + noise3d (x*4,y*4,z*4)} 
  threshold 0   
  contained_by {box {-1,1}}
}

Remarque : les coefficients agissent en amplitude et fréquence comme c'est expliqué plus haut.

Rédacteur: Fabien Mosen

suite : déclaration et combinaison de fonctions

vers l'index général de l'aide