Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : POV-Ray - Les bases
(Article écrit par Régis Hervagault et extrait d'Amiga News - mai 1993)
|
|
Suite aux questions de nombreux lecteurs, voici un article qui va aider les grands débutants
à mieux saisir les concepts de la modélisation par géométrie constructive. Ceux qui maîtrisent
le domaine resteront sans doute un peu sur leur faim, mais qu'ils ne s'inquiètent pas pour autant :
nous reviendrons sur des exemples plus coriaces une fois que tout le monde aura de bonnes bases.
Avant toute chose, je tiens à rappeler qu'une lecture attentive de la documentation de POV est absolument
indispensable pour bien comprendre les exemples proposés depuis le début de cette série :
il m'est bien évidemment impossible de tout détailler en deux pages. Nous concentrons donc
notre étude sur la méthode, qui nécessite un effort d'analyse (pour concevoir l'assemblage
de primitives formant l'objet final), la rédaction du script étant un simple problème de
syntaxe pour lequel je vous renvoie au manuel de référence qui est très bien fait...
La base...
Ceci étant dit, voici les trois opérations de base avec lesquelles il est possible
de réaliser une foule d'objets complexes à partir des primitives (plan, boîte,
sphère, etc.) :
- L'union qui permet d'assembler des objets pour en créer de nouveaux.
- L'intersection qui ne conserve comme objet final que les parties communes
à plusieurs objets.
- La différence qui offre la possibilité de soustraire un objet à un autre
pour le creuser.
Il faut aussi ajouter la fonction inverse qui, associée à un objet,
transforme l'intérieur en extérieur (le creux en plein et inversement).
De plus, on peut, à chaque fois que l'on a besoin d'utiliser un objet,
utiliser à la place une de ces opérations booléennes, et ceci même à
l'intérieur d'une autre opération (il est par exemple possible de faire
l'intersection de l'union de cinq primitives avec la différence de deux autres).
La meilleure façon de visualiser les différentes possibilités offertes est
bien sûr d'en faire l'essai et le listing que je vous propose ce mois-ci
illustre clairement le résultat obtenu pour chaque opération, appliquée
à deux primitives fort simples : la sphère et le cube (une boîte aux
proportions particulières).
Nous commencerons donc par placer comme à l'habitude notre observateur et
une source de lumière afin de voir le résultat. Ensuite, on positionne un
cube de côté 10 à cheval sur une sphère de rayon 10 (c'est-à-dire qu'ils
sont encastrés l'un dans l'autre) et sur lesquels on applique l'opération
choisie. Pour cela, il vous suffit de changer le mot "$$OPERATION$$"
par son nom (union, intersection ou difference (sans "é")) dans le listing.
Vous obtenez alors trois versions différentes à calculer que nous allons
détailler. Les temps de calcul sont très courts : moins d'une heure pour
du 320x256 HAM avec un 68000 de base.
L'union donne comme résultat l'assemblage de notre sphère et du cube,
comme si on les avait simplement juxtaposés sans opération dans le script.
En fait, elle sert à réunir en une seule forme plusieurs autres et est
donc très pratique pour appliquer le même traitement (texture, rotation,
agrandissement, etc.) à plusieurs primitives.
L'intersection se charge de ne conserver des objets initiaux que les
parties qui leur sont communes. L'objet final est constitué uniquement de
la matière qui est à la fois contenue par la sphère et par le cube.
Si les deux objets ne se touchent pas, on obtient rien, s'ils sont inclus
l'un dans l'autre, on obtient le plus petit.
La différence est particulièrement efficace pour creuser un objet,
puisqu'elle permet de supprimer un volume à un autre. En fait, il
s'agit de réaliser l'intersection d'un objet avec l'inverse d'un autre, ce
qui conduit à ne conserver du premier objet que les parties qui ne sont
pas dans le second. C'est, selon les auteurs de POV, la façon dont le
calcul est effectivement réalisé.
D'un point de vue mathématique (ça se complique un peu), on peut résumer
les trois opérations par des pseudo-formules qui se rapprochent de la
théorie des ensembles (les fameuses "patates" que l'on apprend à
dessiner en classe primaire) :
- union {A,B} = {A,B}
- intersection {A,B} = {union {difference {A,B}, difference {B,A} inverse}
- différence {A,B} = intersection {A,B} inverse}
Listing
/* Listing "3 en 1" par R. Hervagault le 24 mars 1993 pour Amiga News.
Test des opérations booléennes disponibles en CSG avec POV.
Remplacer $$OPERATION$$ par un des mots-clés UNION, INTERSECTION, DIFFERENCE.
Attention : temps de calcul très courts ! */
// Une source de lumière blanche
object {
light source { <-50 50 -50> color red 1 green 1 blue 1 }
}
// L'observateur fixe les deux objets
camera {
location <-10 20 -20>
look_at <0 4 0>
}
/* L'opération choisie, appliquée à une sphère et un à cube qui se touchent.
Texture bleue rapide à calculer avec un petit reflet pour accentuer le relief */
object {
$$OPERATION$$ {
sphere { <0 0 0> 10 }
box { <-5 5 -5> <5 15 5>}
}
texture {
ambient 0.333
diffuse 0.666
color red 0.333 green 0.666 blue 1
phong 1 phong_size 25
}
}
|
Exercice
Maintenant que vous connaissez ces trois opérations, voici un petit exercice
d'application dont nous verrons une correction la prochaine fois.
Je vous propose de modéliser un dé à jouer classique avec six faces, selon
le principe suivant : un cube aux arêtes arrondies pour qu'il puisse bien
rouler et dont les points seront en creux sur les faces (une hémisphère
centrale évidée pour la face "1", une hémisphère évidée dans chacun des
coins pour la face "4", etc.).
Observez bien, sur un véritable dé, l'ordre des faces avant de vous lancer,
et bon travail...
Pour exemple
La petite abeille qui agrémente cet article est ici en réponse à
plusieurs questions qui m'ont été posées concernant les limites
de la modélisation avec POV.
A ma connaissance, et contrairement à des rumeurs persistantes, il n'existe toujours
pas de modeleur pour POV. Pourtant, les superbes exemples fournis dans le
kit de distribution, comme le poisson symbole de cette rubrique, sont
loin d'avoir été écrits "à la main" comme ceux que je vous propose.
Il n'y a qu'à jeter un coup d'oeil aux scripts : qui peut prétendre modéliser des
courbes avec une précision de sept chiffres après la virgule sans utilitaire ?
Les auteurs de DKB-Trace ou POV ont leurs propres petits programmes spécifiques qui
ne sont malheureusement pas distribués, et c'est pourquoi le réalisme des
scènes écrites "à la main" n'atteindra jamais ce qu'un véritable modeleur
comme celui de Real 3D peut apporter.
Cela dit, avouez qu'on peut obtenir un résultat charmant (dans le plus pur
style des célèbres "fables géométriques") pour peu que l'on fasse un petit
effort pour écrire le script. Celui décrivant mon abeille, que j'ai écrit
au début de mon apprentissage de DKB-Trace, est long d'une bonne dizaine de
pages et ne contient que des primitives car je ne connaissais pas bien les
opérations CSG à l'époque (l'abeille entière est un seul objet composite)
ni texture particulière. L'image est en mode 640x512 HAM8 des puces AGA
(262 144 couleurs), excellent compromis entre HAM et 24 bits,
qui convaincra, je l'espère, ceux qui hésitent encore à passer à la nouvelle gamme Amiga.
|