Le problème de notre isosurface, c'est que POV-Ray n'a
absolument aucune idée d'où se trouve approximativement votre surface.
En effet, il ne peut pas simplement calculer la valeur correspondant à chaque point de l'espace infini, ça ferait beaucoup.
On va donc commencer par le limiter : lui dire où, précisément, il va calculer. On va ainsi déclarer un contenant, dans lequel sera notre isosurface. Le résultat sera en fait l'intersection de l'isosurface globale (calculée sur tout l'espace) et du contenant. Le but est donc de faire un contenant suffisamment grand pour que notre surface soit dedans, mais suffisamment petit pour que POV-Ray ne passe pas des heures à faire des calculs pour rien...
Il y a deux types de contenant possibles : une boîte ou une sphère. Choisissez celui qui permet le mieux d'encapsuler votre surface.
Le contenant, avec la fonction de définition, sont les
seuls paramètres indispensables à POV-Ray pour faire une isosurface.
Pourtant, vous le verrez bien assez vite, vous n'arriverez à rien sans utiliser quelques autres paramètres...
En réalité, le contenant n'est même pas vraiment nécessaire : la valeur par défaut est une boîte, de <-1, -1, -1> à <1, 1, 1>. Mais mieux vaut le spécifier quand même, pour la clarté, et au cas où cette valeur change.
Pour commencer, voici le code simple d'un cylindre dans un cube :
Code : C | isosurface {
function { x*x + y*y - 1 }
contained_by { box { -1, 1 } }
threshold 0
pigment { rgb 1 }
}
|
Commençons par expliquer un peu ce code...
function { } définit la fonction à utiliser. Vous avez le droit d'utiliser dedans les variables
x,
y et
z.
contained_by { } donne le conteneur. Ici, c'est une simple boîte (la valeur par défaut), mais j'aurais aussi bien pu utiliser une sphère.
threshold spécifie le seuil : je vous l'ai dit, ici on met 0. Puisque c'est la valeur par défaut, j'aurais pu enlever cette ligne, mais elle améliore la lisibilité en montrant facilement que le seuil est 0.
Waaah ! Ca marche !! Mais... Pourquoi ne pas avoir utilisé un vrai cylinder pour ça ?...
Tsss, jeune insolent !
Dans cet exemple, on aurait bien pu utiliser un cylindre classique...
Voici donc un deuxième exemple, un tout petit peu plus intéressant :
Code : C | isosurface {
function { x*x + y*y - z }
contained_by { box { -1, 1 } }
threshold 0
pigment { rgb 1 }
}
|
Et voilà ce que ça donne chez moi :
Mais ?? C'est tout pas beau !!
Je vous l'avais dit !

Il manque quelques paramètres pour être certain que POV-Ray dessine bien notre surface...