home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / LUXART / LUXART.DOC < prev    next >
Text File  |  1993-10-07  |  66KB  |  1,749 lines

  1.                          ╔════════════════════════╗
  2.                          ║     ·L·U·X·A·R·T·      ║
  3.                          ║       Ray-Tracer       ║
  4.                          ║      Version 1.0       ║
  5.                          ║       [13/09/93]       ║
  6.                          ╚════════════════════════╝
  7.                                       
  8.                 (C)opyright Septembre 1993, ChromaGraphics.
  9.                    Ecrit et développé par Stéphane MARTY.
  10.                                       
  11.          Ce logiciel est officiellement diffusé et distribué par :
  12.                                       
  13.                                 DP Tool Club
  14.                                   B.P. 745
  15.                           59657 Villeneuve D'Ascq
  16.  
  17. Il est disponible sur 2 disquettes 3"1/2 (1,44Mo) ou sur CD-ROM.
  18. Pour que l'authenticité du programme ne puisse être mise en doute, le pack
  19. distribué sur disquettes doit se présenter sous la forme :
  20.           °°°°°°°°°°°°°°
  21. DISQUETTE 1 : (contenu)
  22. °°°°°°°°°°°
  23. - LISEZMOI.COM : note à lire
  24. - DISK1.ID     : identité de la disquette
  25. - INSTALLE.EXE : programme d'installation
  26. - LUXART1.SM   : fichier de données compactées n°1
  27. - LUXART2.SM   : fichier de données compactées n°2
  28. - LUXART3.SM   : fichier de données compactées n°3
  29.  
  30. DISQUETTE 2 : (contenu)
  31. °°°°°°°°°°°
  32. - DISK2.ID     : identité de la disquette
  33. - LUXART4.SM   : fichier de données compactées n°4
  34. - LUXART5.SM   : fichier de données compactées n°5
  35.  
  36. Le logiciel ne doit être installé qu'à partir de sa propre procédure
  37. d'installation.
  38.  
  39. Le manuel de référence complet et illustré imprimé en qualité laser sera
  40. disponible à partir du mois de Novembre 1993. Voir le fichier MANUEL.DOC qui
  41. contient le bon de commande ainsi que d'autres détails à connaître.
  42.  
  43. Sachez dès à présent que cette succincte documentation ne couvre que 25%
  44. (pour-cent) environ de la totalité du manuel de LUXART. En effet, elle
  45. représente le strict minimum pour commencer à travailler avec le logiciel.
  46.  
  47.  
  48. 1) INTRODUCTION
  49. °°°°°°°°°°°°°°°
  50.  
  51. LUXART v1.0 est le nouveau logiciel français 32-bits de Ray-Tracing (procédé
  52. de rendu d'image de synthèse du domaine du photoréalisme utilisant les lois
  53. fondamentales de l'optique) pour IBM PC 386/486 et compatibles. Il a été
  54. développé par l'auteur des deux précédents ray-tracers DIRECTOR-3D et
  55. SM·TRACER 386.
  56. Ce programme atteind désormais des sommets dans le domaine du photoréalisme
  57. sur cette gamme de machine. Ses algorithmes sont, en effet, plus pointus que
  58. ceux qu'utilisent Persistence of Vision v1.0, PolyRay, RayShade..., d'où un
  59. rendu de meilleure qualité. Ils ont été, à la base, développés séparément
  60. par C. Watkins, M. VandeWettering (MTV ray-tracer) et S. Coy (Vivid).
  61. De plus, la convivialité de LUXART, sa simplicité d'emploi et ses facultés
  62. de traitement écrasent tout ce qui s'est fait jusqu'à présent dans le
  63. Domaine Public en matière de création d'images de synthèse.
  64. Bien qu'étant développé pour être supporté par un processeur Intel 386, ce
  65. logiciel est plutôt taillé pour les "matheux" que sont les 486DX. En effet,
  66. les calculs en virgule flottante sont fortement sollicités par les
  67. procédures de LUXART et "fatiguent" rapidement ceux (les 386) qui n'ont pas
  68. assez de ressources pour cela. Heureusement, la solution du coprocesseur
  69. arithmétique (387SX/DX, 487SX) sauve les meubles...
  70.  
  71.  
  72. 2) CARACTERISTIQUES
  73. °°°°°°°°°°°°°°°°°°°
  74. En voici un petit aperçu :
  75.  
  76. ■ Rendu Ray-Tracing
  77.  · Réflexion
  78.  · Réfraction (avec indice)
  79.  · Lumière diffuse
  80.  · Lumière ambiante
  81.  · Réflexion spéculaire
  82.  · Ombres portées
  83.  · Ombres douces (exactes)
  84.  · Caustiques (les rayons lumineux sont réfléchis et brûlent à l'intérieur
  85.    d'une surface en réfraction. On peut alors les apercevoir dans l'ombre de
  86.    l'objet).
  87.  
  88. ■ Détails techniques pour la caméra
  89.  · Ouverture du diaphragme
  90.  · Profondeur de champ
  91.  · Champ visuel
  92.  
  93. ■ Trois niveaux d'anti-crénelage
  94.  · Rapide
  95.  · Soigné
  96.  · Récursif (avec seuil)
  97.  
  98. ■ Quatre types de source lumineuse
  99.  · Point
  100.  · Ampoule
  101.  · Laser
  102.  · Projecteur
  103.  
  104. ■ Bump mapping (procédé permettant de reproduire des surfaces bosselées).
  105.  
  106. ■ Image mapping (procédé permettant de plaquer un fichier graphique sur la
  107.   surface d'un objet).
  108.  
  109. ■ Brouillard
  110.  
  111. ■ Rendu artefact (phénomène d'origine artificielle dont l'apparition est liée
  112.   à la méthode utilisée pour l'observation d'un fait naturel...).
  113.  
  114. ■ Perspective (projection 3D -> 2D)
  115.  · Photographique
  116.  · Orthogonale
  117.  · Universelle
  118.  · Architecturale
  119.  
  120. ■ Puissantes commandes de traitement des matières
  121.  · damier
  122.  · concentrique
  123.  · fractal
  124.  · turbulence
  125.  · cycle
  126.  · amplitude
  127.  · vague
  128.  · crête à crête
  129.  · transition
  130.  · atténuation
  131.  · phase
  132.  · imperfection
  133.  
  134. ■ Primitives de base
  135.  · Cône
  136.  · Sphère
  137.  · Polygone
  138.  · Triangle lissé
  139.  · Anneau
  140.  · Disque
  141.  · Cylindre
  142. ■ contrôlées par des commandes de type
  143.  · déplacer
  144.  · pivoter
  145.  · ajuster
  146.  · découper (CSG)
  147.  · bloc
  148.  
  149. ■ Commandes du Préprocesseur
  150.  · inclure
  151.  · déclarer
  152.  · annuler
  153.  
  154. ■ Modeleur 3D filaire intégré (nécessite une carte vidéo avec 1Mo RAM).
  155.  
  156. ■ Editeur de scripts intégré
  157.  
  158. ■ Enveloppes (automatiquement déployées autour de chaque objet afin d'en
  159.   optimiser le rendu).
  160.  
  161. ■ Génère 7 formats graphiques
  162.  · LUXart (24-bits compressé)
  163.  · TARGA (24-bits)
  164.  · JPEG (24-bits compressé)
  165.  · RAW (24-bits)
  166.  · SunRaster (24-bits)
  167.  · PCX (24-bits compressé)
  168.  · GIF (8-bits compressé)
  169.  
  170. ■ Interface utilisateur VGA
  171.  · Gestion par icônes, menus déroulants et multi-fenêtrage.
  172.  · Souris obligatoire
  173.  
  174. ■ Gère 17 modèles de cartes vidéo compatibles V.E.S.A.
  175.  · Ahead Systems
  176.  · ATI
  177.  · Chips & Technologies
  178.  · Cirrus Logic
  179.  · Compaq
  180.  · Everex
  181.  · Genoa
  182.  · NCR
  183.  · OAK Technologies
  184.  · Paradise
  185.  · Trident
  186.  · Tseng Labs
  187.  · Video Seven
  188.  
  189. ■ Traitement sur images
  190.  · Filtres sur format LUX
  191.  · Conversion LUX <-> TGA <-> GIF...
  192.  · Visualisation LUX -> TGA -> GIF
  193.  · Impression GIF en émulation HP LaserJet+, Postscript et HP PaintJet.
  194.  
  195. ■ Procédures (générant un script prêt à être utilisé)
  196.  · Arbre fractal
  197.  · Carrelage puzzle
  198.  · Flocon de sphères
  199.  · Modèle de tore
  200.  · Terrain Plasma (avec projection 3D en temps réel)
  201.  
  202. ■ Divers...
  203.  · Méthode RVB 256 couleurs ou 64 tons de gris pour afficher l'image pendant
  204.    le rendu.
  205.  · 6 algorithmes proposés pour assurer la conversion 24bits -> 8bits du
  206.    format GIF.
  207.  · Possibilité de continuer un rendu interrompu.
  208.  · Autorise le rendu d'une partie de l'image.
  209.  · Contrôle de la qualité du rendu
  210.  · Accès temporaire au système DOS possible.
  211.  · Rapport de travail rédigé sur demande dans un fichier ASCII texte.
  212.  · Résolution d'une image illimitée.
  213.  · Indication de la durée du dernier calcul effectué.
  214.  · Détection automatique du type de processeur (CPU) pour une optimisation
  215.    maximale du ray-tracer.
  216.  · Temps de calculs exceptionnels par rapport à la complexité et au réalisme
  217.    des images obtenues.
  218.  · Puissant analyseur syntaxique de scripts.
  219.  
  220.  ...et tout ce qui n'a pas été dit et qui reste à dire...
  221.  
  222. Comme dans tous les autres ray-tracers du marché, la description de la scène
  223. virtuelle à calculer est écrite dans le langage de LUXART, mais les outils
  224. qu'il met à la disposition de l'utilisateur vont grandement faciliter cette
  225. tâche.
  226. Le rendu d'une image par LUXART se fait toujours pixel par pixel et ligne
  227. par ligne sachant qu'au moins un rayon lumineux par pixel sera suivi.
  228.  
  229. Configuration minimale nécessaire
  230.  · IBM PC ou compatible 386 (SX/DX) ou plus.
  231.  · Ecran et carte SVGA compatible standard V.E.S.A.
  232.  · 4 Mo de mémoire RAM.
  233.  · Disque dur avec 6 Mo de disponible.
  234.  · Souris.
  235.  · MS-DOS/PC-DOS v5.0/6.0 ou DR-DOS v5.0/7.0.
  236.  
  237. Configuration recommandée (idéale)
  238.  · IBM PC ou compatible i486 DX (33/50/66 Mhz).
  239.  · Carte vidéo SVGA avec 1Mo de mémoire.
  240.  · Gestionnaire d'antémémoire SMARTDRV résident.
  241.  · Plus de 4 Mo de mémoire RAM.
  242.  · 10Mo de libre sur disque dur.
  243.  
  244.  
  245. 3) LES LIMITES DE CETTE VERSION
  246. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  247.  
  248. Cette version distribuée par DP Tool Club fait partie du Domaine Public.
  249. Elle peut être copiée et diffusée librement. Cependant, elle reste très
  250. limitée par rapport à celle qui accompagne le manuel de référence disponible
  251. directement auprès de l'auteur (voir fichier MANUEL.DOC).
  252. Voici les principales restrictions imposées à la présente version :
  253.  
  254. · Rendu maximum bridé à des images en 640 x 400 pts ;
  255. · N'utilise pas les services d'un processeur arithmétique installé ou d'un
  256.   486DX (tourne toujours comme si l'on travaillait sur un 80386) ;
  257. · Le modeleur 3D filaire d'objets n'est ni opérationnel, ni inclus ;
  258. · Les tests anti-virus ne sont pas activés.
  259.  
  260. Le fichier MANUEL.DOC contient un tableau comparatif des performances entre
  261. la version du Domaine Public et la version Auteur. Les résultats sont
  262. "cruels" pour la première... En effet, si vous possédez un 486DX ou un
  263. coprocesseur arithmétique 387SX, 387DX ou 487SX, vous avez tout intérêt à
  264. vous procurer la version Auteur pour tirer pleinement profit de la puissance
  265. de votre machine et, a fortiori, du programme.
  266.  
  267.  
  268.  
  269. 4) RAY-TRACING : Principes et théorie
  270. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  271.  
  272. - Chapitre traité uniquement dans le Manuel de Référence -
  273.  
  274.  
  275.  
  276. 5) PREMIERE PRISE DE CONTACT AVEC LUXART
  277. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  278.  
  279. Le programme s'installe automatiquement dans un répertoire nommé LUXART.
  280. Pour y rentrer, il faut donc se placer sur le disque qui contient ce
  281. répertoire et taper la commande DOS :
  282.  CD LUXART {entrée}
  283. Ce répertoire comporte 4 sous-répertoires nommés :
  284. · SCENES qui contient les fichiers scripts de scènes (.ART) ;
  285. · OBJETS qui contient les fichiers scripts d'objets utilisés dans des scènes
  286.   (.INC) ;
  287. · IMAGES qui contient les fichiers images rendues (7 formats possibles) ;
  288. · TEXTURES qui contient les fichiers échantillons de textures à plaquer sur
  289.   la surface des objets (.LUX), les fichiers palettes de couleurs (.PAL) et
  290.   les fichiers filtres (.FLX).
  291.  
  292. Le logiciel se lance en tapant le nom du programme exécutable :
  293.  LUXART {entrée}
  294. Comme nous le verrons ultérieurement, il est possible de lui donner une
  295. série de commandes en ligne afin de lui faire calculer une scène directement
  296. sans avoir à passer par le Bureau.
  297. Un fois le nom de l'exécutable validé, l'image de présentation LUXART
  298. s'affiche au bout de quelques secondes si aucun problème n'est survenu. Dans
  299. le cas contraire, un message d'erreur sera annoncé.
  300. Sur cette image est écrit en haut de l'écran, le numéro de version et le
  301. message "Un instant svp...". Le programme prépare ici son initialisation.
  302. Cela peut durer de 5 à 25 secondes environ suivant la vitesse de traitement
  303. de la machine. Une fois cette phase terminée, le Bureau graphique de LUXART
  304. s'affiche : nous sommes au coeur du programme.
  305. Le bureau graphique peut être considéré comme la tour de contrôle du
  306. logiciel. C'est d'ici que l'utilisateur va pouvoir exploiter les différents
  307. outils qui lui sont proposés et donner les ordres qui seront traités par le
  308. ray-tracer.
  309.  
  310. 5.1) Description du Bureau
  311. °°°°°°°°°°°°°°°°°°°°°°°°°°
  312.  
  313. NB : Certains termes employés ci-après se rapportent directement au chapitre
  314. concernant le langage de description de LUXART.
  315.  
  316. Ce bureau se présente sous cette forme :
  317.  
  318. Stéphane MARTY             · L · U · X · A · R · T ·                 Version 1.0
  319.  
  320.  ┌─── Scène ──┐ ┌───── [X] Imposer taille image ─────┐          ╔═══╗ Modeleur
  321.  │ ≡ ········ │ │ Largeur ········  Hauteur ········ │          ╚═══╝ objet 3D
  322.  └────────────┘ └────────────────────────────────────┘
  323.  ┌── Format ──┐ ┌─[X] Anti-crénelage ─┐   ┌──── Rendu ─────┐    ╔═══╗ Editeur
  324.  │┌(■) LUXART │ │ ┌(■) Nul            │   │ [X] Réflexions │    ╚═══╝ script ≡
  325.  │├(■) TARGA  │ │ ├(■) Rapide         │   │ [X] Réfraction │
  326.  │├(■) JPEG ≡ │ │ ├(■) Soigné         │   │ [X] Matières   │    ╔═══╗ Lancer
  327.  │├(■) RAW    │ │ └(■) Récursif       │   │ [X] Ombres     │    ╚═══╝ rendu
  328.  │├(■) SunRAS │ └─────────────────────┘   └────────────────┘
  329.  │├(■) PCX-24 │ ┌───── CPU ────┐ ┌── Méthode 24 : 8 bits ──┐    ╔═══╗ Continuer
  330.  │└(■) GIF    │ │              │ │ ┌(■) Algorith. Heckbert │    ╚═══╝ rendu
  331.  └────────────┘ │              │ │ ├(■) Popularité         │
  332.                 └──────────────┘ │ └(■) Niveaux de gris    │    ╔═══╗ Barre des
  333.  ┌──────── Options ────────┐     │ ┌(■) Floyd-Steinberg    │    ╚═══╝ Menus
  334.  │  [X] Préprocesseur      │     │ ├(■) Ordonné            │
  335.  │  [X] Rapport ASCII .RAP │     │ └(■) Chaotique          │    ╔═══╗ Accès
  336.  │ ┌(■) Affichage N&B      │     └─────────────────────────┘    ╚═══╝ au DOS
  337.  │ └(■) Affichage Couleurs │ ┌───── [X] Carte Vidéo ───────┐                    
  338.  │ ···· : Ligne de début   │ │ ≡ ························· │    ╔══════╗ Quitter
  339.  │ ···· : Ligne de fin     │ │   (■) 512Ko         (■) 1Mo │    ╚══════╝ on/off
  340.  └─────────────────────────┘ └─────────────────────────────┘
  341.  [X] Sauvegarde bureau │   Ray-Tracer 32-bits   │ Durée dernier calcul hh:mm:ss
  342.  
  343. (PS : la conversion en caractères ASCII n'est pas toujours évidente...)
  344.  
  345.  
  346. Légende
  347. -------
  348.  
  349. [X]   : interrupteur activé/désactivé (l'option sera prise en compte ou pas)
  350.  
  351. (■)   : sélecteur (1 sélecteur activé par arbre)
  352.  
  353. ┌(■)  : arbre de sélection. Les sélecteurs sont liés entre-eux mais un seul
  354. ├(■)  : à la fois ne s'allume.
  355. └(■)    
  356.  
  357.  ≡    : bouton pression qui appelle une boîte de liste ou une boîte de dialogue 
  358.  
  359. ╔═══╗ : bouton icone qui déclenche une action prioritaire
  360. ╚═══╝ : 
  361.  
  362. hh:mm:ss : durée exprimée en heures, minutes et secondes
  363.  
  364.  
  365. Description
  366. -----------
  367.  
  368.  ┌─── Scène ──┐  Doit contenir le nom de la scène en cours (ouverte).
  369.  │ ≡ ········ │  1 seule scène peut être ouverte en même temps.
  370.  └────────────┘  La scène est choisie dans la liste appelée par le bouton
  371.                  pression. Si une nouvelle pression est exercée sur ce bouton
  372.   alors qu'une scène est déjà ouverte, une fenêtre vous propose d'en terminer
  373.   avec celle-ci et d'en ouvrir une autre.
  374.  
  375.  
  376.  ┌───── [X] Imposer taille image ─────┐  Fixe la taille de l'image à calculer
  377.  │ Largeur ········  Hauteur ········ │  si l'interrupteur est activé, sinon
  378.  └────────────────────────────────────┘  la taille est celle spécifiée dans
  379.                                          le script. La présente version est
  380.   volontairement bridée à une largeur de 640 et une hauteur de 400 pts. Ceci
  381.   est aussi valable en ligne de commande (voir chapitre 7).
  382.  
  383.  
  384.  ┌── Format ──┐  Sélectionne le type de format qui doit être utilisé pour
  385.  │┌(■) LUXART │  créer l'image de synthèse. Les 6 premiers sont codés sur
  386.  │├(■) TARGA  │  24-bits. Le premier est prioritaire sur tous les autres
  387.  │├(■) JPEG ≡ │  car c'est celui que manipule LUXART dans les traitements.
  388.  │├(■) RAW    │  Le format JPEG contient une boîte d'Options pour régler
  389.  │├(■) SunRAS │  le taux de compression de l'image (plus la qualité est
  390.  │├(■) PCX-24 │  proche de 100%, moins le fichier sera compressé et plus
  391.  │└(■) GIF    │  l'image sera de bonne qualité).
  392.  └────────────┘
  393.  
  394.  
  395.  ┌─[X] Anti-crénelage ─┐  Fixe le niveau d'anti-crénelage à utiliser pour
  396.  │ ┌(■) Nul            │  rendre l'image si l'interrupteur est activé, sinon
  397.  │ ├(■) Rapide   ─┐    │  le programme choisit celui indiqué dans le script.
  398.  │ ├(■) Soigné   ─┼>·· │  La valeur qui peut être indiquée dans la zone ··
  399.  │ └(■) Récursif ─┘    │  correspond au seuil. Si cette zone est vide, le
  400.  └─────────────────────┘  seuil est celui écrit dans le script.
  401.  
  402.  
  403.  ┌──── Rendu ─────┐  Règle la qualité du rendu. Cette qualité est au maximum
  404.  │ [X] Réflexions │  lorsque toutes les propriétés sont activées. Une
  405.  │ [X] Réfraction │  propriété désactivée diminuera les temps de calcul mais
  406.  │ [X] Matières   │  le réalisme de l'image obtenue sera également affecté.
  407.  │ [X] Ombres     │
  408.  └────────────────┘
  409.  
  410.  
  411.  ┌──────── Options ────────┐  
  412.  │  [X] Préprocesseur      │  - Préprocesseur activé ou non pendant l'analyse
  413.  │  [X] Rapport ASCII .RAP │  syntaxique du script.
  414.  │ ┌(■) Affichage N&B      │  - Rapport confirmé ou non sur le rendu en cours.
  415.  │ └(■) Affichage Couleurs │  Ce rapport est écrit en français dans un fichier
  416.  │ ···· : Ligne de début   │  ASCII qui porte le même nom que le script 
  417.  │ ···· : Ligne de fin     │  correspondant. il sera toujours placé dans le
  418.  └─────────────────────────┘  sous-répertoire IMAGES.
  419.   - Le sélecteur de palette (N&B, couleurs) permet de choisir si l'image qui
  420.   s'affiche en temps réel pendant le rendu doit être en 256 couleurs ou en
  421.   64 niveaux de gris.
  422.   - Si une image doit être calculée partiellement (pour des tests par exemple),
  423.   les lignes de début et de fin doivent être indiquées dans leur zone respec-
  424.   tive sachant que la première ne doit pas être supérieure à la seconde et
  425.   qu'elles ne doivent pas dépasser la largeur de la résolution de l'image.
  426.  
  427.  
  428.  ┌── Méthode 24 : 8 bits ──┐  Ces sélecteurs sont utilisés lorsque l'on
  429.  │ ┌(■) Algorith. Heckbert │  choisit de rendre une image au format GIF.
  430.  │ ├(■) Popularité         │  Ils correspondent chacun à un algorithme
  431.  │ └(■) Niveaux de gris    │  différent qui contrôle la conversion 24-bits
  432.  │ ┌(■) Floyd-Steinberg    │  de l'image originale en 8-bits du format GIF.
  433.  │ ├(■) Ordonné            │  La fonction de chacun d'eux n'est explicitée
  434.  │ └(■) Chaotique          │  que dans le manuel de référence. Mais, dans la
  435.  └─────────────────────────┘  plupart des cas, le meilleur résultat est obtenu
  436.   par Algorith. Heckbert / Floyd-Steinberg.
  437.  
  438.  
  439.  ┌───── [X] Carte Vidéo ───────┐  Lorsque la carte vidéo est activée (défaut)
  440.  │ ≡ ························· │  le rendu d'une scène s'affiche en temps 
  441.  │   (■) 512Ko         (■) 1Mo │  réel en 256 couleurs ou en 64 tons de gris
  442.  └─────────────────────────────┘  suivant la palette sélectionnée dans le cadre
  443.   'Options'. Si l'interrupteur n'est pas coché, LUXART ne passera pas en mode
  444.   vidéo VESA pour calculer l'image, mais restera en mode texte et signalera
  445.   son évolution ligne par ligne. La carte vidéo est détectée systématiquement
  446.   au lancement du programme ainsi que sa mémoire RAM.
  447.  
  448.  
  449.  [X] Sauvegarde bureau : Permet de sauvegarder la configuration du bureau au
  450.                          moment de quitter LUXART afin de le retrouver intact
  451.                          à la prochaine exécution du programme.
  452.  
  453.  
  454.  Durée dernier calcul hh:mm:ss : Exprime en heures, minutes et secondes les
  455.                                  temps de calcul du dernier rendu.
  456.  
  457.  
  458.  ╔═══╗ Modeleur : N'est pas opérationnel dans cette version.
  459.  ╚═══╝ objet 3D
  460.  
  461.  
  462.  ╔═══╗ Editeur  : Le bouton pression ouvre une boîte de dialogue dans laquelle
  463.  ╚═══╝ script ≡ : on indique si le script à éditer correspond à la scène en
  464.                   cours (ouverte, répertoire SCENES) ou à un script objet
  465.  (répertoire OBJETS). Dans le second cas, l'objet existant est sélectionné
  466.  dans la liste appelée par le bouton pression de cette boîte de dialogue.
  467.  Pour créer un nouveau fichier objet, il suffit d'activer le sélecteur 'Objet'
  468.  et d'inscrire son nom dans la zone de texte grisée.
  469.  Une scène peut être éditée à condition d'être ouverte (en cours). 
  470.  L'éditeur se présente sous la forme :
  471.  - La ligne d'édition est écrite en blanc sur fond rouge. Le curseur se trouve
  472.    donc toujours sur cette ligne.
  473.  - Le reste du texte est écrit en vert sur fond noir.
  474.  - Les barres d'état en haut et en bas de l'écran sont écrite en blanc sur fond
  475.    bleu.
  476.  - Tout message de l'éditeur sera écrit en bleu clair sur l'avant dernière
  477.    ligne de l'écran.
  478.  - A partir du moment où un caractère est inséré ou supprimé du script, celui-
  479.    ci est considéré comme modifié et un astérisque clignotant s'affiche devant
  480.    le nom du fichier en haut à gauche de l'écran.
  481.  - L'écran récapitulatif des principales touches opérationnelles s'obtient en
  482.    appuyant sur la touche F1.
  483.  
  484.  
  485.  ╔═══╗ Lancer : Déclenche le rendu complet de la scène en cours. Chaque
  486.  ╚═══╝ rendu  : interrupteur et sélecteur est analysé pour savoir s'il doit
  487.                 jouer un rôle dans ce calcul. Le programme entre alors dans
  488.   sa phase d'analyse syntaxique du script assisté du préprocesseur s'il est
  489.   actif. Si une erreur ou un problème surgit, ce sera pendant ce laps de
  490.   temps. Si tout se déroule correctement, LUXART entre en phase "Ray-Tracing"
  491.   et commence son suivi de rayons. L'image se génère pixel par pixel en 256
  492.   couleurs ou 64 tons de gris sur l'écran (si la carte vidéo est active), et
  493.   est codée sur 24-bits dans un fichier au format correspondant (8-bits si GIF)
  494.   placé dans le sous-répertoire IMAGES. Le rendu peut être interrompu en
  495.   appuyant sur Echap et le programme rendra la main dès qu'il aura terminé de
  496.   calculer la ligne entière.
  497.  
  498.  
  499.  ╔═══╗ Continuer : Permet de continuer une scène dont le rendu a été volontai-
  500.  ╚═══╝ rendu     : rement interrompu par l'utilisateur. Pour cela, elle doit
  501.                    être ouverte avec son fichier .LUX correspondant créé dans
  502.   le répertoire IMAGES. Les 2 mêmes phases que le précédent 'Lancer rendu'
  503.   seront enchaînées avec la différence que la partie déjà calculée s'affichera
  504.   avant la phase 'Ray-Tracing'.
  505.  
  506.  
  507.  ╔═══╗ Barre des : Démasque la barre des menus déroulants placée au sommet de
  508.  ╚═══╝ Menus     : l'écran. Le pointeur de la souris devient alors une flèche
  509.                    et le bureau passe en mode 'Edition des menus'. La signi-
  510.   fication des commandes de chaque menu fait l'objet du prochain chapitre.
  511.   Pour retourner au mode bureau, cliquer sur le menu 'Bureau' à droite de la
  512.   barre des menus.
  513.  
  514.  
  515.  ╔═══╗ Accès  : Permet l'accès temporaire au système DOS. Il est conseillé
  516.  ╚═══╝ au DOS : de ne pas exécuter d'application sous ce mode car LUXART est
  517.                 toujours résident en mémoire. Pour quitter le système et
  518.   retourner au bureau, taper EXIT.
  519.  
  520.  
  521.  ╔══════╗ Quitter : Permet de sortir définitivement du programme.
  522.  ╚══════╝ on/off  : Au moment de quitter, une dernière fenêtre vous demandera
  523.                     de confirmer votre choix en appuyant sur OUI ou NON.
  524.   Dans l'affirmative, l'interrupteur 'Sauvegarde bureau' est vérifié pour
  525.   savoir si la configuration actuelle du bureau doit être enregistrée afin de
  526.   la retrouver intacte à la prochaine exécution du programme.
  527.  
  528.  
  529. Tous les messages destinés à l'utilisateur sont écrits en blanc sur fond
  530. noir sous le bureau en bas de l'écran.
  531. Toutes les actions sont menées à l'aide de la souris. Le bouton de gauche
  532. est utilisé pour le "clic".
  533. Néanmoins, les lettres en surimpression bleu clair de certains cadres et
  534. boutons (exemple : le 'S' de Scène, le 'L' de Lancer rendu...) peuvent être
  535. directement activés en appuyant sur la touche du clavier correspondant à
  536. cette initiale. La touche 'Echap' prend ici la fonction 'Annuler' lorsqu'une
  537. liste ou une boîte de dialogue est affichée (retour au bureau).
  538.  
  539.  
  540.  
  541. 6) LA BARRE DES MENUS DEROULANTS
  542. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  543.  
  544. Comme nous venons de le voir dans le précédent chapitre, cette barre des
  545. menus est démasquée et activée par le bouton icône 'Barre des Menus'. Dans
  546. chaque commande de ces menus, les lettres jaunes écrites en majuscules
  547. signifient qu'elles sont directement accessibles au clavier (raccourci).
  548. Voici une courte description de chacune des commandes :
  549.  
  550. 6.1) Menu Fichier
  551. °°°°°°°°°°°°°°°°°
  552.  
  553. - Nouvelle scène : Par cette commande doit être spécifié le nom de la
  554.   nouvelle scène à créer (et formater) qui sera ouverte et placée dans le
  555.   sous-répertoire SCENES.
  556.  
  557. - Ouvrir une scène : Même fonction que le bouton pression de la zone 'Scène'
  558.   du bureau.
  559.  
  560. - Editer une scène : Même fonction que le bouton icône 'Editeur script' du
  561.   bureau. Cette commande n'est accessible dans ce menu que lorsqu'une scène
  562.   est ouverte.
  563.  
  564. - Fermer la scène en cours : Clôture la scène active mais ne propose pas
  565.   d'en ouvrir une autre.
  566.  
  567. - Copier une scène : Copie le contenu de la scène sélectionnée dans la boîte
  568.   de liste (scène source) vers une nouvelle scène dont le nom doit être
  569.   spécifié dans la zone 'Scène cible'. Cette scène sera placée dans le sous-
  570.   répertoire SCENES.
  571.  
  572. - Supprimer une scène : Supprime physiquement la scène choisie dans la boîte
  573.   de liste.
  574.  
  575. - Copier un objet : Copie le contenu de l'objet sélectionné dans la boîte de
  576.   liste (objet source) vers un nouvel objet dont le nom doit être spécifié
  577.   dans la zone 'Objet cible'. Cet objet sera placé dans le sous-répertoire
  578.   OBJETS.
  579.  
  580. - Supprimer un objet : Supprime physiquement l'objet choisi dans la boîte de
  581.   liste.
  582.  
  583. - Environnement : Indique le chemin d'accès aux 4 sous-répertoires de
  584.   travail de LUXART. Il est vivement conseillé de ne pas apporter de
  585.   modifications à ces zones de texte sauf si vous tenez absolument à utiliser
  586.   d'autres répertoires déjà créés.
  587.  
  588.  
  589. 6.2) Menu Image
  590. °°°°°°°°°°°°°°°
  591.  
  592. - Filtrer une image LUX : Permet de soumettre un fichier image au format LUX
  593.   choisi dans la boîte de liste à un filtre prédéfini ou personnel.
  594.   L'explication de chacun de ces filtres est fourni dans le manuel. Le fichier
  595.   qui reçoit le résultat de cette procédure est indiqué dans la zone 'Nouvelle
  596.   image filtrée'.
  597.  
  598. - Convertir une image :
  599. 1) format LUX -> TGA : convertit le fichier image LUX sélectionné dans la
  600.    boîte de liste vers un nouveau fichier image TGA (Targa 24-bits) de même
  601.    nom. Cette image sera placée dans le sous-répertoire IMAGES.
  602.  
  603. 2) format LUX -> GIF : convertit le fichier image LUX sélectionné dans la
  604.    boîte de liste vers un nouveau fichier image GIF (8-bits) de même nom. Cette
  605.    image sera placée dans le sous-répertoire IMAGES. La conversion en GIF prend
  606.    en compte les options de la zone 'Méthode 24 -> 8 bits' du bureau. Le
  607.    résultat est affiché après conversion.
  608.  
  609. 3) format LUX -> niveaux de gris : convertit en 256 tons de gris le fichier
  610.    image LUX sélectionné dans la boîte de liste vers un nouveau fichier image
  611.    LUX dont le nom a subi une petite transformation pour garder intact
  612.    l'original. Cette image sera placée dans le sous-répertoire IMAGES.
  613.  
  614. - Voir une image :
  615.  (Cette commande est inactive si l'interrupteur 'Carte vidéo' du bureau n'est
  616.   pas coché)
  617. 1) format LUX : affiche en 256 couleurs le fichier image LUX sélectionné
  618.    dans la boîte de liste. Il n'est pas nécessaire de disposer d'une carte
  619.    vidéo 24-bits car la conversion en temps réel 24-bits (16,8 Millions de
  620.    couleurs) en 8-bits (256 couleurs) est assurée par la méthode 3-3-2 RVB.
  621.  
  622. 2) format TGA : affiche en 256 couleurs le fichier image TGA (Targa)
  623.    sélectionné dans la boîte de liste. Il n'est pas nécessaire de disposer
  624.    d'une carte vidéo 24-bits car la conversion en temps réel 24-bits (16,8
  625.    Millions de couleurs) en 8-bits (256 couleurs) est assurée par la méthode
  626.    3-3-2 RVB.
  627.  
  628. 3) format GIF : affiche en 256 couleurs le fichier image GIF sélectionné
  629.    dans la boîte de liste.
  630.  
  631. - Imprimer une image GIF : imprime en émulation HP LaserJet+, PostScript ou
  632.   HP PaintJet le fichier image GIF sélectionné dans la boîte de liste. Une
  633.   boîte de dialogue propose alors diverses options.
  634.  
  635.  
  636. 6.3) Menu Textures
  637. °°°°°°°°°°°°°°°°°°
  638.  
  639. - Voir un fichier palette : affiche les 256 couleurs que contient le fichier
  640.   palette PAL sélectionné dans la boîte de liste.
  641.  
  642. - Voir un fichier texture LUX (inactive si l'interrupteur 'Carte vidéo' du
  643.   bureau n'est pas coché) : affiche en 256 couleurs le fichier texture LUX
  644.   sélectionné dans la boîte de liste. Il n'est pas nécessaire de disposer
  645.   d'une carte vidéo 24-bits car la conversion en temps réel 24-bits (16,8
  646.   Millions de couleurs) en 8-bits (256 couleurs) est assurée par la méthode
  647.   3-3-2 RVB.
  648.  
  649. - Convertir format GIF -> LUX : convertit le fichier GIF (appartenant au
  650.   sous-répertoire TEXTURES) sélectionné dans la boîte de liste vers un nouveau
  651.   fichier texture LUX (24-bits) de même nom. Il sera également placé dans le
  652.   sous-répertoire TEXTURES.
  653.  
  654. - Convertir format TGA -> LUX : convertit le fichier TGA (24-bits,
  655.   appartenant au sous-répertoire TEXTURES) sélectionné dans la boîte de liste
  656.   vers un nouveau fichier texture LUX (24-bits) de même nom. Il sera également
  657.   placé dans le sous-répertoire TEXTURES.
  658.  
  659.  
  660. 6.4) Procédures
  661. °°°°°°°°°°°°°°°
  662.  
  663. - Arbre fractal : génère un script objet dans le sous-répertoire OBJETS qui
  664.   reproduit naturellement un arbre (voir image PARC.JPG) suivant les valeurs
  665.   des paramètres spécifiés dans la boîte de dialogue. Le nom de ce nouvel
  666.   objet sera celui fixé dans la zone 'Fichier procédure'. La fonction des
  667.   paramètres est explicitée dans le manuel de référence.
  668.  
  669. - Carrelage puzzle : génère un script objet dans le sous-répertoire OBJETS
  670.   qui reproduit du carrelage brisé (voir image ZEPHYR.JPG) suivant les valeurs
  671.   des paramètres spécifiés dans la boîte de dialogue. Le nom de ce nouvel
  672.   objet sera celui fixé dans la zone 'Fichier procédure'. La fonction des
  673.   paramètres est explicitée dans le manuel de référence.
  674.  
  675. - Flocon de sphères : génère un script objet dans le sous-répertoire OBJETS
  676.   qui reproduit un amas de sphères en couches récursives (voir images
  677.   OMBRES1.JPG ou CAUSTIQU.JPG) suivant les valeurs des paramètres spécifiés
  678.   dans la boîte de dialogue. Le nom de ce nouvel objet sera celui fixé dans la
  679.   zone 'Fichier procédure'. La fonction des paramètres est explicitée dans le
  680.   manuel de référence.
  681.  
  682. - Modèle de tore : génère un script objet dans le sous-répertoire OBJETS qui
  683.   reproduit un tore suivant les valeurs des paramètres spécifiés dans la boîte
  684.   de dialogue. Le nom de ce nouvel objet sera celui fixé dans la zone 'Fichier
  685.   procédure'. La fonction des paramètres est explicitée dans le manuel de
  686.   référence.
  687.  
  688. - Terrain plasma : génère un script objet dans le sous-répertoire OBJETS qui
  689.   reproduit une portion de terrain naturellement accidentée (voir image
  690.   ROCHER.JPG) suivant les valeurs des paramètres spécifiés dans la boîte de
  691.   dialogue. Le nom de ce nouvel objet sera celui fixé dans la zone 'Fichier
  692.   procédure'. La fonction des paramètres est explicitée dans le manuel de
  693.   référence.
  694.   Précision : lorsqu'un plasma a été graphiquement généré à l'écran, trois
  695.   touches sont opérationnelles :
  696.   1) Echap : pour retourner au bureau ;
  697.   2) Barre d'espace : pour recalculer un autre plasma à l'écran ;
  698.   3) Entrée : pour entamer la procédure de calcul des normales et de création
  699.      du fichier script objet. ATTENTION : ceci peut être très long en fonction
  700.      de l'Etendue du terrain. Un terrain peut occuper plusieurs Mégas octets
  701.      sur votre disque dur !
  702.  
  703.  
  704. 6.5) Quitter
  705. °°°°°°°°°°°°
  706.  
  707. - Oui / Non : Au moment de quitter, une dernière fenêtre vous demandera de
  708.   confirmer votre choix en appuyant sur OUI ou NON. Dans l'affirmative,
  709.   l'interrupteur 'Sauvegarde bureau' est vérifié pour savoir si la
  710.   configuration actuelle du bureau doit être enregistrée afin de la retrouver
  711.   intacte à la prochaine exécution du programme.
  712.  
  713. - A propos... : affiche une boîte de dialogue avec quelques noms ainsi que
  714.   la quantité de Kilos octets libres sur l'unité de disque en cours.
  715.  
  716.  
  717. 6.6) Bureau
  718. °°°°°°°°°°°
  719.  
  720. Masque et désactive la barre des menus et redonne la main au bureau. Le
  721. pointeur de la souris redevient alors une main pointant son index.
  722.  
  723.  
  724.  
  725. 7) LES COMMANDES EN LIGNE
  726. °°°°°°°°°°°°°°°°°°°°°°°°°
  727.  
  728. Comme nous l'avons dit en début de chapitre 5, plusieurs options peuvent
  729. être rendues actives dès le lancement de LUXART, ce qui permet de lancer le
  730. calcul d'une scène directement à partir du DOS.
  731.  
  732. La syntaxe est donc la suivante :
  733. LUXART { options } scène
  734.  
  735. Les options disponibles sont :
  736.  
  737. -i largeur hauteur : taille de l'image à calculer.
  738. -a 0..3 : type d'anti-crénelage.
  739.          0 = nul / 1 = rapide / 2 = soigné / 3 = récursif
  740. -v : désactive la carte vidéo.
  741. -c : permet de continuer le calcul à l'endroit où il a été interrompu.
  742. -r : ne créé pas de rapport ASCII du rendu.
  743. -g : utilise une palette de 64 niveaux de gris au lieu de 256 couleurs.
  744.  
  745. Voici quelques exemples significatifs :
  746.  
  747. LUXART -i 320 200 -r aestus
  748. LUXART -c crypta
  749. LUXART piscine
  750. LUXART -a 0 -g cuisine
  751.  
  752. Le rappel de ces commandes en ligne est obtenu en tapant
  753. LUXART ?
  754.  
  755.  
  756. 8) LE LANGAGE
  757. °°°°°°°°°°°°°
  758.  
  759. Afin de vous familiariser avec le langage de description de LUXART, il est
  760. conseillé d'étudier les fichiers scripts de scènes (extension .ART,
  761. répertoire SCENES) inclus dans ce package. Pratiquement tous les niveaux de
  762. difficultés sont rencontrés.
  763.  
  764.  
  765. 8.1) Les axes
  766. °°°°°°°°°°°°°
  767. LUXART se paramètre en coordonnées cartésiennes et utilise donc comme repère
  768. un système d'axes orthonormés (abscisse, ordonnée et cote). Chaque
  769. coordonnée est exprimée par trois nombres X, Y et Z dont les valeurs peuvent
  770. être entières ou décimales, positives ou négatives sachant que :
  771.  
  772. - l'on regarde à travers l'écran sur l'axe +Y
  773. - l'axe +X tend vers la droite de l'écran
  774. - l'axe +Z tend vers le haut de l'écran
  775.  
  776.           +Z
  777.                  +Y
  778.            |     /
  779.            |   /
  780.            | /
  781.  ----------+----------> +X
  782.          / |
  783.        /   |
  784.      /     |
  785.            |
  786.  
  787.  
  788. 8.2) Les types de paramètres utilisés par le langage
  789. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  790.  
  791. ┌------------┬-----------------┬----------------┬----------------┐
  792. | Paramètres |    Définition   |     Exemple    |     Valeurs    |
  793. ├------------┼-----------------┼----------------┼----------------┤
  794. |   x y z    | Vecteur         | 5  -47  62.11  | Toutes         |
  795. |   r v b°°  | Couleur         | 0.0  0.58  1.0 | Entre 0 et 1   |
  796. |   ent      | Entier          | 320, -54, 0... | Toutes non déc.|
  797. |   déc      | Décimal         | -24.78, 1.4... | Toutes déc.    |
  798. |   ent+     | Entier positif  | 1024           | Toutes >= 0    |
  799. |   déc+     | Décimal positif | 8.5, 0.1574... | Toutes >= 0    |
  800. |   $texte$  | Chaîne de carac.| Bois_Clair     | ASCII 80c. max |
  801. └------------┴-----------------┴----------------┴----------------┘
  802.  
  803. °° r v b = rouge vert bleu = couleurs primaires
  804.  
  805.  exemple : pour reproduire la couleur Orange, le trinôme sera 1 .647059 0
  806.  1       = 100% de rouge
  807.  .647059 = 64,7059% de vert
  808.  0       = 0% de bleu
  809.  
  810.  
  811. 8.3) Les commentaires
  812. °°°°°°°°°°°°°°°°°°°°°
  813.  
  814. Pour mettre une seule ligne en commentaire, on utilise la syntaxe :
  815.  // commentaire...
  816.  
  817. En fait, tout ce qui se trouve après '//' n'est plus pris en compte :
  818.  #inclure couleurs.inc   // fichier contenant la déclaration de près de
  819.                          // 320 noms de couleurs.
  820.  
  821. Pour mettre une partie du script en commentaire, on utilise la syntaxe :
  822.  /*  <- début du commentaire
  823.    ...
  824.    ...
  825.    ...  */  <- fin du commentaire
  826. Les commentaire peuvent être imbriqués les uns dans les autres.
  827.  
  828.  
  829. 8.4) Les fonctions du langage
  830. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  831.  
  832. Le vocabulaire de LUXART va permettre la description "mathématique" de la
  833. scène virtuelle que l'artiste souhaite reproduire. Dans la mesure où la
  834. syntaxe de chaque fonction est respectée, le créateur n'a aucune limite.
  835. Aussi, la meilleure façon d'apprendre et de progresser est d'étudier et de
  836. comprendre les nombreux exemples de scripts fournis avec ce logiciel...
  837. Précision : les accents ne sont pas reconnus ! Il faut, par exemple, écrire
  838. 'sphere' et non pas 'sphère' sinon l'analyseur syntaxique signalera une
  839. erreur.
  840.  
  841. LUXART n'impose pas de forme particulière pour écrire un script. La
  842. description peut être menée à terme dans n'importe quel ordre. Cependant, il
  843. est conseillé, pour des questions d'organisation, de suivre une structure
  844. qui semble simple et logique :
  845.  
  846. [ initialisation ]         par exemple #inclure couleurs.inc
  847.                                        #inclure matieres.inc
  848.                                   etc...
  849.  
  850. environnement { ... }      définition de l'environnement
  851.  
  852. source_lumineuse { ... }   mise en place des sources de lumière
  853.  
  854. matiere { ... }            description mathématique de la scène par
  855. objet { ... }              les différentes primitives du ray-tracer
  856. .                       
  857. .
  858. .
  859.  
  860. Les trois fonctions suivantes (8.4.1, 8.4.2 & 8.4.3) sont contrôlées par le
  861. préprocesseur et doivent par conséquent être précédées du symbole #.
  862.  
  863.  
  864. 8.4.1) Les déclarations
  865. °°°°°°°°°°°°°°°°°°°°°°°
  866. On s'en sert pour assigner à une chaîne de caractères :
  867. - une valeur
  868. - une texture
  869. - une couleur
  870. - un ensemble de primitives...
  871. afin de l'utiliser ultérieurement dans le script et, au besoin, plusieurs fois.
  872.  
  873. Exemples (commentés suivant la syntaxe de LUXART) :
  874.  
  875. #declarer Rouge [ 1 0 0 ]    // une couleur se définie toujours entre crochets
  876.  
  877. #declarer INTENSITE .8 .8 .8 // la variable INTENSITE correspond à une
  878.                              // intensité d'éclairage
  879.  
  880. #declarer DOUCEUR 32         // cette variable sera utilisée ultérieurement
  881.  
  882. #declarer TAPIS +                       // pour définir une texture ou un
  883.          matiere { +                    // objet, on joint chaque fin de
  884.                   couleur Vert_Fonce +  // ligne par le signe '+' pour dire
  885.                   imperfection .2 +     // à LUXART que la déclaration
  886.                   force_crenelage +     // se poursuit sur la ligne suivante
  887.                  }
  888.  
  889.  
  890. 8.4.2) L'effacement de variable
  891. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  892. Il est possible de modifier ou d'effacer la valeur d'une variable qui a déjà
  893. été utilisée grâce à la fonction #annuler.
  894.  
  895. Exemple tiré de PAUSCAFE.ART (commentés suivant la syntaxe de LUXART) :
  896.  
  897. #declarer NIVEAU 1.1  //  NIVEAU prend la valeur 1.1
  898. .
  899. .
  900. .
  901. #annuler NIVEAU      // on lui retire sa valeur...
  902.  
  903. #declarer NIVEAU .8  // ...pour lui en affecter une autre
  904. .
  905. .
  906. .
  907. #annuler NIVEAU  // puisqu'on ne l'utilisera plus, on la retire de la mémoire
  908.  
  909.  
  910. 8.4.3) L'inclusion de scripts
  911. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  912.  
  913. Le préprocesseur de LUXART est capable d'imbriquer un script dans un autre
  914. grâce à la fonction #inclure. Ceci est, par exemple, très efficace pour
  915. utiliser un objet décrit séparément dans un autre script.
  916.  
  917. Exemples (commentés suivant la syntaxe de LUXART) :
  918.  
  919. #inclure couleurs.inc   //  ceci est devenu indispensable en début de script
  920.                         //  pour pouvoir utiliser les différentes couleurs
  921.                         //  par leur nom et non par leur trinôme r v b.
  922.                         //  Profitez-en, il y en a près de 320 !
  923.  
  924. bloc { deplacer -5 10 0 }
  925. #inclure tabouret.inc      //  on rajoute un tabouret de plus...
  926. fin_bloc
  927.  
  928.  
  929. 8.4.4) L'environnement
  930. °°°°°°°°°°°°°°°°°°°°°°
  931.  
  932. C'est une des fonctions fondamentales du langage de LUXART parce que c'est
  933. grâce à elle que l'on positionne la caméra et que l'on configure la scène a
  934. créer.
  935. Tous ses paramètres sont optionnels sauf ceux qui concernent la caméra (les
  936. 4 premiers) :
  937.  
  938. environnement
  939. {
  940.  position_camera       x y z
  941.  pointe_vers           x y z
  942.  orientation_z         x y z
  943.  champ_visuel          ent+
  944.  resolution            xent+ yent+
  945.  facteur_proportionnel déc+
  946.  perspective           $texte$
  947.  
  948.  atmosphere            r v b
  949.  fond                  r v b
  950.   ou
  951.  fond                  { $texte$
  952.                          orientation_z  x y z
  953.                        }
  954.  brouillard            déc+
  955.  
  956.  anti_crenelage        $texte$
  957.  seuil                 ent+
  958.  artefact
  959.  
  960.  ouverture_diaphragme  déc+
  961.  profondeur_champ      déc+
  962.  quantite              ent+
  963.  
  964.  refraction_limitee
  965.  caustiques
  966.  limite_ray_tracing    ent+
  967. }
  968.  
  969. position_camera   : Sans commentaire...
  970.  
  971. pointe_vers       : Endroit de la scène où pointe la caméra
  972.  
  973. orientation_z     : 0 0 1 pour un axe Z en hauteur (défaut)
  974. champ_visuel      : >= 180 correspond à un objectif à grand angle.
  975.                     <= 10 équivaut à un objectif téléphoto.
  976.                     Un angle compris entre 40 et 80 donne de bons
  977. résultats.
  978.  
  979. resolution        : Taille en pixels de l'image à calculer
  980.  
  981. facteur_proportionnel : Rapport Largeur/Hauteur de l'écran pour l'image à     
  982.                         calculer. Pour des écrans 14", 15" et 17", 1.3333     
  983.                         est la meilleure valeur.
  984.  
  985. perspective       : Contrôle la projection 3D du monde virtuel de LUXART     
  986.                     sur le plan 2D de l'écran. 4 paramètres sont valables :
  987.                     photographique (défaut, la plus humaine)
  988.                     universelle (projection sphérique)
  989.                     architecturale (pour les amateurs d'architecture)
  990.                     orthogonale (rayons parallèles entre-eux). Pour ce      
  991.                     dernier paramètre, le 'champ_visuel' n'est pas utilisé   
  992.                     et est remplacé par :
  993.                      largeur ent+
  994.                     qui correspond à la hauteur de l'écran dans le système   
  995.                     de coordonnées.
  996.  
  997. atmosphere        : Contrôle la densité de l'air dans la scène. S'apparente
  998.                     aussi à un facteur de lumière ambiante globale. Pour     
  999.                     des images d'extérieur, le trinôme .2 .2 .2 ou plus     
  1000.                     simule un éclairage ambiant naturel, tandis que pour     
  1001.                     des rendus d'intérieur, l'atmosphère se situe plutôt     
  1002.                     autour de .05 .05 .05 ou .1 .1 .1.
  1003.  
  1004. fond             : Couleur retournée quand il n'y a pas eu d'intersection   
  1005.                    rayons/objets. Un fichier palette peut aussi servir de   
  1006.                    fond. Dans ce cas, chaque couleur qu'il contient est     
  1007.                    étalée en fonction de l'orientation voulue sur Z.
  1008.  
  1009. brouillard        : Densité de la brume dans la scène (0 par défaut). Plus   
  1010.                    cette valeur est supérieure à 0, et plus la couleur de   
  1011.                    fond influera sur l'intensité du rayon suivi. Il est     
  1012.                    conseillé de ne pas utiliser de valeur du dessus de
  1013. 0.01
  1014.  
  1015. anti_crenelage    : Fixe le niveau d'anti-crénelage utilisé pour le rendu.
  1016.                     nul -> 1 rayon par pixel.
  1017.                     rapide -> 1 rayon est suivi pour une zone de 6 pixels².
  1018.                      A partir de l'intensité de ce rayon, un calcul       
  1019.                      approximatif détermine la couleur des autres pixels   
  1020.                      de ce carré. Donne d'excellents résultats en niveaux
  1021.                      de gris. Les temps de calculs de l'image peuvent     
  1022.                      être réduits jusqu'à 15 fois.
  1023.                     soigne -> 1 pixel est divisé en 4 parties égales qui     
  1024.                      devront chacune suivre 1 rayon.
  1025.                     recursif -> puissante procédure qui subdivise chaque     
  1026.                      pixel en autant de rayon qu'il le faut pour trouver   
  1027.                      la meilleure intensité possible adaptée à ce pixel.   
  1028.                      Cette récursivité est fixée par le paramètre suivant.
  1029.  
  1030. seuil            : Valeur qui détermine le niveau de récursivité maximal    
  1031.                    pour un anti-crénelage récursif. Plus elle est proche    
  1032.                    de 0 et plus l'anti-crénelage sera parfait, mais plus    
  1033.                    les temps de calculs seront longs. Valeur conseillée : 4.
  1034.  
  1035. artefact         : En association avec un anti-crénelage récursif, ce      
  1036.                    paramètre affine encore plus la qualité de l'image et    
  1037.                    lui donne une apparence plus naturelle.
  1038.  
  1039. ouverture_diaphragme    : 0 par défaut. Ce paramètre doit être combiné avec   
  1040.                           le suivant 'profondeur_champ'. Plus grande est sa   
  1041.                           valeur, plus flous seront les objets dans la       
  1042.                           profondeur de champ. De bonnes valeurs varient     
  1043.                           entre 0.05 et 0.2. Avec un contrôle de l'ouverture
  1044.                           du diaphragme, les images rendues vont devenir     
  1045.                           très réalistes telles de véritables photos, mais    
  1046.                           les temps de calculs risquent d'être multipliés     
  1047.                           par 3 ou 4 en fonction de la quantité de rayons     
  1048.                           supplémentaires que l'on aura choisi de suivre     
  1049.                           pour obtenir un tel effet.
  1050.  
  1051. profondeur_champ   : Détermine la distance entre la caméra et les objets     
  1052.                      nets les plus rapprochés. Si aucune valeur n'est        
  1053.                      donnée, cette distance sera celle calculée entre        
  1054.                      'position_camera' et 'pointe_vers'.
  1055.  
  1056. quantite         : Fixe le nombre de rayons supplémentaires par pixel qui   
  1057.                    doivent être suivis lorsque le paramètre              
  1058.                    'ouverture_diaphragme' n'est pas nul. 8 est la valeur    
  1059.                    par défaut.
  1060.  
  1061. refraction_limitee : Elimine l'atténuation exponentielle des rayons qui      
  1062.                      traversent une surface en réfraction. Ceci accélère     
  1063.                      agréablement les temps de calculs lorsque la réfraction
  1064.                      est très sollicitée (ex : PISCINE.ART).
  1065.  
  1066. caustiques        : Force le rendu des caustiques que l'on pourra apercevoir
  1067.                     dans l'ombre des objets en réfraction.
  1068.  
  1069. limite_ray_tracing : Contrôle la puissance du moteur de ray-tracing. Les     
  1070.                      valeurs possibles vont de 1 à 20. Plus cette valeur     
  1071.                      tend vers 20 et plus le ray-tracer exploitera sa        
  1072.                      puissance. La valeur par défaut est 20.
  1073.  
  1074.  
  1075. 8.4.5) Les sources lumineuses
  1076. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1077.  
  1078. Pour chacun des 3 premiers types de source lumineuse dont dispose LUXART,
  1079. les paramètres 'intensité' et 'puissance' contrôleront l'éclat de cette
  1080. source et la variation de l'intensité en fonction de la distance suivant
  1081. l'équation :
  1082.                 puissance
  1083.  I = I  / (dist)
  1084.       0
  1085.  
  1086. - I  est l'intensité de base de la source.
  1087.    0
  1088. - dist est la distance entre la source et le point de la surface de l'objet
  1089.   dont la couleur va être déterminée.
  1090.  
  1091. Avec puissance 0, l'intensité de la source ne change pas en fonction de la
  1092. distance.
  1093.  
  1094. 1)
  1095. source_lumineuse
  1096. {
  1097.  type point
  1098.  position   x y z   // emplacement du point lumineux
  1099.  intensite  r v b   // couleur intrinsèque de la source
  1100.  puissance  ent+    // 0 par défaut
  1101. }
  1102.  
  1103. Les rayons émanants du point lumineux sont les plus faciles et les plus rapides
  1104. à suivre. Les résultats sont, de plus, assez surprenants et de bonne qualité.
  1105.  
  1106. 2)
  1107. source_lumineuse
  1108. {
  1109.  type ampoule        // déclenche le rendu des ombres douces
  1110.  position  x y z     // emplacement du centre de cette source sphérique
  1111.  rayon  ent+ ou déc+ // rayon de cette sphère
  1112.  intensite  r v b    // couleur intrinsèque de la source
  1113.  puissance  ent+     // 0 par défaut
  1114.  quantite  ent+      // quantité de rayon supplémentaire suivis pour former
  1115.                      // les ombres douces projetées
  1116. }
  1117.  
  1118. Les résultats obtenus avec cette source sont assez impressionnants (voir
  1119. BILLARD.ART). Cependant, elle force le programme à effectuer des calculs
  1120. supplémentaires qui vont inexorablement ralentir le processus. Aussi, il est
  1121. conseillé de ne pas en abuser à moins de posséder une machine qui aime ça
  1122. (486DX50 ou DX2/66) !
  1123.  
  1124. 3)
  1125. source_lumineuse
  1126. {
  1127.  type projecteur
  1128.  position         x y z  // emplacement du projecteur
  1129.  pointe_vers      x y z  // point de la scène vers lequel il est dirigé
  1130.  cone_angle_min   ent+   // voir explications ci-après
  1131.  cone_angle_max   ent+   //
  1132.  intensite  r v b        // couleur intrinsèque de la source
  1133.  puissance  ent+         // 0 par défaut
  1134. }
  1135.  
  1136. Les paramètres 'cone_angle_min' et 'cone_angle_max' définissent le cône de
  1137. lumière produit par le projecteur. Tout ce qui est à l'intérieur de l'angle
  1138. 'cone_angle_min' sera totalement illuminé. A partir de là, l'intensité
  1139. décroît jusqu'à ce que l'angle 'cone_angle_max' soit atteint.
  1140.  
  1141. 4)
  1142. source_lumineuse
  1143. {
  1144.  type laser
  1145.  position_laser   x y z   // départ du faisceau laser
  1146.  visee_laser      x y z    // point de la scène vers lequel il se dirige
  1147.  intensite        r v b    // couleur intrinsèque du laser
  1148. }
  1149.  
  1150. Cette source reproduit exactement les propriétés d'un laser : faisceau de
  1151. lumière cohérente sans aucun changement d'intensité.
  1152.  
  1153.  
  1154. 8.4.6) Les matières
  1155. °°°°°°°°°°°°°°°°°°°
  1156.  
  1157. Cette fonction va permettre de définir les propriétés de surface (réflexion,
  1158. réfraction, textures, lumière diffuse etc...) de chacun des objets contenus
  1159. dans la scène. Lorsqu'une structure 'matiere' est rencontrée (même
  1160. antérieurement déclarée et réutilisée par son nom), toutes les primitives
  1161. qui la suivent recevront ses caractéristiques jusqu'à ce qu'une autre
  1162. 'matiere' soit trouvée. Une telle structure peut rapidement devenir complexe
  1163. si elle contient des définitions de textures, de turbulences ou si elle
  1164. inclue d'autres structures. Tous les paramètres de cette fonction sont
  1165. optionnels.
  1166.  
  1167. structure courante :
  1168. ------------------
  1169.  
  1170. matiere
  1171. {
  1172.  diffuse         r v b
  1173.  ambiante        r v b
  1174.  reflexion       r v b
  1175.  speculaire      ent+  r v b
  1176.  refraction      r v b
  1177.  indice_refraction déc+
  1178.  imperfection    déc+
  1179.  force_crenelage
  1180. }
  1181.  
  1182. diffuse          : Couleur intrinsèque de l'objet.
  1183.  
  1184. ambiante         : Facteur de luminosité propre de la surface.
  1185.  
  1186. reflexion        : Faculté de réfléchir les rayons de lumière reçus.
  1187.                    0 0 0 = aucune réflexion -> 1 1 1 = miroir parfait.
  1188.  
  1189. speculaire        : Contrôle la taille et la couleur des taches de         
  1190.                     brillance dûs à la réflexion spéculaire. Une faible     
  1191.                     valeur (1 à 20) produit de larges taches lumineuses et   
  1192.                     plus cette valeur est grande, moins il y a de réflexion
  1193.                     spéculaire sur la surface. La couleur est souvent       
  1194.                     Blanche mais n'est pas indispensable. Dans ce cas, ces   
  1195.                     taches seront rendues à partir de la couleur de la surface.
  1196.  
  1197. refraction        : Transparence de la surface. Faculté d'absorber les      
  1198.                     rayons de lumière reçus.
  1199.                     0 0 0 = opaque -> 1 1 1 = transparent.
  1200.                     Doit être utilisé en combinaison avec 'indice_refraction'.
  1201.  
  1202. indice_refraction  : Indice de réfraction. Dénote en fait l'angle de         
  1203.                      déviation d'un rayon qui traverse une matière en        
  1204.                      réfraction. Ces indices ne s'inventent pas, ils se      
  1205.                      calculent. Un grand nombre d'entre-eux sont déjà connus
  1206.                      (manuel de référence).
  1207.  
  1208. imperfection      : Perturbe chaotiquement la normale de la surface de      
  1209.                     l'objet lorsque sa couleur est déterminée afin de lui    
  1210.                     donner une apparence imparfaite et rugueuse. La valeur   
  1211.                     attendue correspond à l'angle maximal autorisé pour     
  1212.                     faire varier la normale (.01 à .3 pour de bons résultats).
  1213.  
  1214. force_crenelage    : L'anti-crénelage fixé dans l'environnement n'est pas
  1215.                      actif (nul) pour tout objet dont la surface comporte ce
  1216.                      paramètre.
  1217.  
  1218. Bump mapping :
  1219. ------------
  1220.  
  1221. Ceci est un procédé qui permet de simuler des surfaces bosselées, ridées ou
  1222. comportant de véritables vagues.
  1223. la syntaxe sera de la forme :
  1224.  
  1225. matiere
  1226. {
  1227.  diffuse    r v b  // optionnel...
  1228.  reflexion  r v b  // optionnel...
  1229.  ...
  1230.  bosses
  1231.  {
  1232.   .
  1233.   .
  1234.   .
  1235.  }
  1236. }
  1237.  
  1238. Evidemment, plusieurs structure 'bosses' peuvent faire partie d'une même
  1239. structure matière.
  1240.  
  1241. Première structure possible :
  1242. Concerne la simulation de vagues que l'on peut observer, par exemple, dans
  1243. des substances liquides.
  1244.  
  1245. bosses
  1246. {
  1247.  vague
  1248.  {
  1249.   centre         x y z
  1250.   crete_a_crete  déc+
  1251.   amplitude      éc+
  1252.   attenuation    déc+ entre 0 et 1
  1253.   phase          déc+ entre 0 et 1
  1254.  }
  1255. }
  1256.  
  1257. centre        : Position du centre de la source d'où se forme la vague.
  1258.  
  1259. crete_a_crete : Distance crête à crête de la sinusoïde.
  1260.  
  1261. amplitude     : Quantité maximale de perturbation infligée à la normale de   
  1262.                 la surface. Une valeur inférieur ou égale à 1 est meilleure.
  1263.  
  1264. attenuation   : Dénote l'atténuation de l'amplitude avec la distance. .9     
  1265.                 signifie, par exemple, que l'amplitude s'affaiblit de 10%    
  1266.                 entre chaque ondulation crête à crête à partir de la source.
  1267.  
  1268. phase         : Fixe "l'apparence" de départ de la vague. Pour mieux         
  1269.                 comprendre ce paramètre, il faut savoir que pour animer une  
  1270.                 vague, il suffit de modifier sa phase.
  1271.  
  1272. Seconde structure possible :
  1273. Simule, cette fois, des déformations fractales naturelles sur une surface.
  1274.  
  1275. bosses
  1276. {
  1277.  turbulence
  1278.  {
  1279.   ajuster    x y z
  1280.   deplacer   x y z
  1281.   amplitude  déc+
  1282.   cycle      déc+ ou ent+
  1283.  }
  1284. }
  1285.  
  1286. ajuster      : Règle sur les 3 axes les proportions de la perturbation      
  1287.                avant d'appliquer la fonction de turbulence.
  1288.  
  1289. deplacer     : Décale sur les 3 axes les coordonnées de la perturbation     
  1290.                avant d'appliquer la fonction de turbulence.
  1291.  
  1292. amplitude    : A partir de la position d'une intersection de rayon, la      
  1293.                fonction 'turbulence' choisit au hasard une valeur comprise  
  1294.                entre (+/-) 'amplitude' pour former la perturbation.
  1295.  
  1296. cycle        : Contrôle l'apparence fractale de la surface. Lorsque le      
  1297.                cycle n est > 1, la fonction 'turbulence' est réitérée n     
  1298.                fois avec chaque fois le nouveau résultat qui s'accumule à   
  1299.                l'ancien. Chaque cycle a donc sa somme qui double et son     
  1300.                amplitude qui diminue de moitié.
  1301.  
  1302. Les textures :
  1303. ------------
  1304.  
  1305. C'est ce qui fait la force et le réalisme de beaucoup d'objets qui doivent
  1306. avoir l'air pur et naturel (bois, marbre, roche, granite etc...). Ces
  1307. textures algorithmiques se conçoivent à partir d'échantillons de trois
  1308. sortes. Les facultés de traitement des textures de LUXART sont
  1309. particulièrement poussées afin d'obtenir des résultats exceptionnels. Les
  1310. meilleurs exemples se trouvent dans les scripts livrés avec le ray-tracer.
  1311.  
  1312. Une texture consiste, en fait, à définir deux matières distinctes et à
  1313. spécifier où et comment on souhaite les assembler entre-elles. Les
  1314. explications suivantes sont données à partir de structures simples,
  1315. dépourvues de fonctions de turbulence ou d'imbrication d'autres structures
  1316. de matière.
  1317.  
  1318. - Echantillon damier :
  1319.   Produit à la base un damier tridimensionnel. La taille des cases est
  1320.   contrôlée par le facteur 'ajuster'.
  1321.  
  1322. matiere
  1323. {
  1324.  texture
  1325.  {
  1326.   echantillon    damier
  1327.   ajuster        x y z   // 2 2 0 consiste à des cases de 2 unités²
  1328.   decaler        x y z   // facultatif
  1329.   imperfection   déc+    // facultatif
  1330.   transition     déc+ 0 à 1
  1331.   ...
  1332.   matiere                // Première matière
  1333.   {
  1334.    diffuse       r v b   // couleur de la première case
  1335.    ...
  1336.   }
  1337.   matiere                // Seconde matière
  1338.   {
  1339.    diffuse       r v b   // couleur de la seconde case
  1340.    ...
  1341.   }
  1342.  }
  1343. }
  1344.  
  1345. transition    : Contrôle la transition de couleur entre la première et la
  1346.                 seconde matière dans la texture. Plus cette valeur est     
  1347.                 proche de 1, et plus la transition sera fluide et dégradée.
  1348.  
  1349.  
  1350. - Echantillon concentrique :
  1351.   Produit alternativement une couche concentrique de chacune des 2 matières
  1352.   définies. Le facteur 'ajuster', facultatif, permet de spécifier sur quel axe
  1353.   doivent se produire les couches en lui attribuant le 0.
  1354.  
  1355. matiere
  1356. {
  1357.  texture
  1358.  {
  1359.   echantillon    concentrique
  1360.   ajuster        x y z         // 0 1 1 pour avoir des couches horizontales
  1361.   transition     déc+ 0 à 1
  1362.   rayon          déc+ ou ent+  // rayon pour la première couche
  1363.   rayon          déc+ ou ent+  // rayon pour la deuxième couche
  1364.   ...
  1365.   matiere                      // Première matière
  1366.   {
  1367.    diffuse       r v b
  1368.    ...
  1369.   }
  1370.   matiere                      // Seconde matière
  1371.   {
  1372.    diffuse       r v b
  1373.    ...
  1374.   }
  1375.  }
  1376. }
  1377.  
  1378. Les deux rayons doivent indiquer au programme le rayonnement de chacune des
  1379. deux matières sachant que le premier spécifié correspond à la première
  1380. matière.
  1381.  
  1382.  
  1383. - Echantillon fractal :
  1384.   Produit une évolution fractale des 2 matières définies.
  1385.  
  1386. matiere
  1387. {
  1388.  texture
  1389.  {
  1390.   echantillon    fractal
  1391.   ajuster        x y z
  1392.   transition     déc+ 0 à 1
  1393.   cycle          déc+ ou ent+  // même utilité que dans 'turbulence'
  1394.   ...
  1395.   matiere                      // Première matière
  1396.   {
  1397.    diffuse       r v b
  1398.    ...
  1399.   }
  1400.   matiere                      // Seconde matière
  1401.   {
  1402.    diffuse       r v b
  1403.    ...
  1404.   }
  1405.  }
  1406. }
  1407.  
  1408. Image mapping :
  1409. -------------
  1410.  
  1411. Ceci est un procédé qui permet de plaquer un fichier image LUX 24-bits placé
  1412. dans le répertoire TEXTURES sur la surface d'un objet. En fait, il s'agit de
  1413. remplacer le trinôme r v b d'un des paramètres 'diffuse', 'ambiante',
  1414. 'reflexion' ou 'refraction' par une structure de type :
  1415.  
  1416.  {
  1417.   plaquer_image   $texte$  // nom du fichier image LUX 24-bits
  1418.  
  1419.   position        x y z    // position du coin supérieur gauche de l'image
  1420.  
  1421.   cadre           x y z    // vecteur qui longe le haut de l'image en la
  1422.                            // traversant du coin supérieur gauche au coin
  1423.                            // supérieur droit.
  1424.  
  1425.   normale         x y z    // normale de la surface sur laquelle est       
  1426.                            // plaquée l'image.
  1427.  
  1428.   ajuster         ent+ ou déc+  // taille de l'image sachant que 1.0 est    
  1429.                                 // sa taille réelle.
  1430.  }
  1431.  ...
  1432.  
  1433. Précision : cette image est plaquée autant de fois qu'il le faut pour recouvrir
  1434.             intégralement la surface si l'ajustement de sa taille reste
  1435.             inférieure à celle de la surface. Pour qu'il n'embrasse qu'une
  1436.             seule fois la surface, il faut jouer sur le paramètre 'ajuster'.
  1437.  
  1438. exemple (tiré de CUISINE.ART) :
  1439.  
  1440. matiere
  1441. {
  1442.  diffuse
  1443.  {
  1444.   plaquer_image tableau.lux
  1445.   position 19.5  29.5  30.8
  1446.   cadre    1 0 0
  1447.   normale  0 -1 0
  1448.   ajuster  8
  1449.  }
  1450.  ...
  1451. }
  1452.  
  1453.  
  1454. 8.4.7) Les primitives
  1455. °°°°°°°°°°°°°°°°°°°°°
  1456.  
  1457. Une primitive est un élément mathématique de base qui, combinée avec d'autres,
  1458. forment un objet plus complexe et plus réaliste.
  1459. LUXART dispose de 7 primitives pour la création des objets :
  1460.  
  1461. Sphère
  1462. ------
  1463.  
  1464. sphere
  1465. {
  1466.  centre  x y z
  1467.  rayon   ent+ ou déc+  // jamais de rayon nul ou négatif
  1468. }
  1469.  
  1470. Anneau
  1471. ------
  1472.  
  1473. anneau
  1474. {
  1475.  centre         x y z
  1476.  normale        a b c         // Perpendiculaire au plan tangant.        
  1477.                               // Détermine la direction dans laquelle     
  1478.                               // l'anneau est orienté.
  1479.  rayon_interne  ent+ ou déc+  // correspond à la taille du 'trou'
  1480.  rayon_externe  ent+ ou déc+  // trou + bague
  1481. }
  1482.  
  1483. Disque
  1484. ------
  1485.  
  1486. disque
  1487. {
  1488.  centre   x y z
  1489.  normale  a b c         // Perpendiculaire au plan tangant.                
  1490.                         // Détermine la direction dans laquelle le disque     
  1491.                         // est orienté.
  1492.  rayon    ent+ ou déc+  // jamais de rayon nul ou négatif
  1493. }
  1494.  
  1495. Cône
  1496. ----
  1497.  
  1498. cone
  1499. {
  1500.  base        x y z        // centre de la base
  1501.  rayon_base  ent+ ou déc+ // jamais de rayon nul ou négatif
  1502.  tete        x y z        // centre de la tête
  1503.  rayon_tete  ent+ ou déc+ // jamais de rayon nul ou négatif
  1504. }
  1505.  
  1506. Cylindre
  1507. --------
  1508.  
  1509. cylindre
  1510. {
  1511.  base   x y z         // centre de la première extrémité
  1512.  haut   x y z         // centre de la seconde extrémité
  1513.  rayon  ent+ ou déc+  // jamais de rayon nul ou négatif
  1514. }
  1515.  
  1516. Polygone
  1517. --------
  1518.  
  1519. polygone
  1520. {
  1521.  sommets ent+    // toujours >= 3
  1522.  sommet  x y z   // coordonnées du premier sommet
  1523.  sommet  x y z   // coordonnées du second sommet...
  1524.  ...
  1525. }
  1526.  
  1527. Précision : le nombre de sommets du polygone est spécifié par 'sommets'.
  1528. Ensuite suit la liste des coordonnées de chacun de ces sommets. Le compte
  1529. doit être exact pour ne pas avoir d'erreur. Attention : LES SOMMETS D'UN
  1530. POLYGONE SONT DISPOSES DANS UN MEME PLAN.
  1531.  
  1532. Triangle lissé
  1533. --------------
  1534. Il s'agit d'un triangle dans lequel on indique, en plus des coordonnées de
  1535. chacun de ses sommets, la normale de chacun d'eux. Cette primitive est très
  1536. utile pour créer des objets complexes qui doivent avoir une apparence lisse
  1537. et quasiment parfaite.
  1538.  
  1539. triangle_lisse
  1540. {
  1541.  sommet  x y z    // premier sommet
  1542.  normale a b c    // normale du premier sommet
  1543.  sommet  x y z    // second sommet
  1544.  normale a b c    // normale du second sommet
  1545.  sommet  x y z    // troisième sommet
  1546.  normale a b c    // normale du troisième sommet
  1547. }
  1548.  
  1549.  
  1550. 8.4.8) Les blocs
  1551. °°°°°°°°°°°°°°°°
  1552.  
  1553. Un bloc est une fonction qui permet d'englober une primitive, une ou
  1554. plusieurs structure, ou encore un ou plusieurs objets entiers afin de les
  1555. manipuler. Ces manipulations portent sur
  1556. - le déplacement,
  1557. - l'ajustement de taille,
  1558. - la rotation sur chaque axe.
  1559. De plus, un bloc peut en imbriquer un autre. Mais, dans ce cas, le ray-tracer
  1560. traite les blocs dans leur ordre d'enfoncement à l'intérieur de la structure
  1561. (le dernier écrit est le premier traité).
  1562.  
  1563. bloc { ajuster    ent+ ou déc+
  1564.        deplacer   x y z
  1565.        pivoter    x y z
  1566.      }
  1567. .                           // développement ici de ce qui doit être
  1568. .                           // contrôler par le bloc
  1569. .
  1570. fin_bloc                    // signale que tout ce qui se trouve entre
  1571.                             // la fonction 'bloc' et celle-ci fait
  1572. partie
  1573.                             // du même bloc.
  1574.  
  1575. Précision : les paramètres situés entre les accolades de 'bloc' sont exécutés
  1576.             suivant leur ordre d'écriture.
  1577.  
  1578. Exemple :
  1579.  
  1580.  bloc { pivoter 0 45 0  ajuster .7 }
  1581.  
  1582. n'a pas le même effet que
  1583.  
  1584.  bloc { ajuster.7  pivoter 0 45 0 }
  1585.  
  1586.  
  1587. 8.4.9) Découper des primitives
  1588. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1589.  
  1590. LUXART est aussi capable de sectionner les primitives précédemment décrites
  1591. par quatre formes de découpage :
  1592. - en sphère,
  1593. - en plan,
  1594. - en cône,
  1595. - en cylindre.
  1596. Ces découpages accroissent ainsi les possibilités de création de formes et
  1597. d'objets.
  1598. La structure de découpage s'ajoute à l'intérieur de celle de la primitive.
  1599. Bien sûr, plusieurs découpes peuvent être faites sur une même primitive.
  1600. Les fichiers scripts DECOUPE1.ART à DECOUPE5.ART sont de bons exemples.
  1601.  
  1602. Découper en plan
  1603. ----------------
  1604.  
  1605. decouper
  1606. {
  1607.  centre  x y z  // Point par lequel passe le plan qui découpe.
  1608.  normale a b c  // Orientation de ce plan. La partie de la primitive qui
  1609.                 // fait face à la normale sera gardée intacte, tandis que
  1610.                 // l'autre partie sera découpée.
  1611. }
  1612.  
  1613. exemple :
  1614.  
  1615. sphere
  1616. {
  1617.  centre 1.5 -1 .5
  1618.  rayon .5
  1619.  decouper
  1620.  {
  1621.   centre 1.5 -1 .5
  1622.   normale 0 0 -1     // On découpe l'hémisphère nord de la sphère. Pour
  1623.                     // découper l'hémisphère sud, il faut indiquer 0 0
  1624. 1.
  1625.  }
  1626. }
  1627.  
  1628. Découper en sphère
  1629. ------------------
  1630.  
  1631. decouper
  1632. {
  1633.  centre  x y z          // centre de la partie sphérique qui va être retirée
  1634.  rayon   ent+ ou déc+
  1635.  interieur ou exterieur // indique si ce qui doit rester intact se trouve à
  1636.                         // l'intérieur ou à l'extérieur de la sphère.
  1637. }
  1638.  
  1639. exemple :
  1640.  
  1641. cylindre
  1642. {
  1643.  haut -1 -1 .5
  1644.  base  1 -1 .5
  1645.  rayon .3
  1646.  decouper
  1647.  {
  1648.   centre 0 -1 .8
  1649.   rayon .5
  1650.   exterieur
  1651.  }
  1652. }
  1653.  
  1654. Découper en cylindre
  1655. --------------------
  1656.  
  1657. decouper
  1658. {
  1659.  haut    x y z        // centre de la première extrémité du cylindre en découpe
  1660.  base    x y z        // centre de la seconde extrémité du cylindre en découpe
  1661.  rayon   ent+ ou déc+
  1662.  interieur ou exterieur // indique si ce qui doit rester intact se trouve à
  1663.                         // l'intérieur ou à l'extérieur du cylindre.
  1664. }
  1665.  
  1666. exemple :
  1667.  
  1668. sphere
  1669. {
  1670.  centre -1 -1 1
  1671.  rayon 1
  1672.  decouper
  1673.  {
  1674.   haut -2 -2 1.5
  1675.   base  1  3 1.5
  1676.   rayon .5
  1677.   interieur
  1678.  }
  1679. }
  1680.  
  1681. Découper en cône
  1682. ----------------
  1683.  
  1684. decouper
  1685. {
  1686.  tete    x y z        // centre de la première extrémité du cône en découpe
  1687.  rayon_tete ent+ ou déc+
  1688.  base    x y z        // centre de la seconde extrémité du cône en découpe
  1689.  rayon_base ent+ ou déc+
  1690.  interieur ou exterieur // indique si ce qui doit rester intact se trouve à
  1691.                         // l'intérieur ou à l'extérieur du cône.
  1692. }
  1693.  
  1694. exemple :
  1695.  
  1696. cylindre
  1697. {
  1698.  tete -2 -2 1.5
  1699.  base  1  3 1.5
  1700.  rayon .5
  1701.  decouper
  1702.  {
  1703.   tete  2 1.5 1
  1704.   rayon_tete .2
  1705.   base -2 1.5 1
  1706.   rayon_base .8
  1707.   interieur
  1708.  }
  1709. }
  1710.  
  1711.  
  1712. 9) LA MISE AU POINT D'UNE SCENE
  1713. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1714.  
  1715. - Chapitre traité uniquement dans le Manuel de Référence -
  1716.  
  1717.  
  1718.  
  1719. 10) LE MODELEUR 3D FILAIRE D'OBJETS
  1720. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1721.  
  1722. - Chapitre traité uniquement dans le Manuel de Référence -
  1723.  
  1724.  
  1725.  
  1726. 11) QUELQUES CONSEILS DE L'AUTEUR
  1727. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  1728.  
  1729. - Chapitre traité uniquement dans le Manuel de Référence -
  1730.  
  1731.  
  1732.  
  1733. Remerciements à
  1734. °-°-°-°-°-°-°-°
  1735.  
  1736. - Christopher WATKINS
  1737. - Mark VANDEWETTERING
  1738. - Stephen COY
  1739. pour leurs précieux algorithmes sans lesquels LUXART ne serait qu'un ray-
  1740. tracer de plus comparable à SM·TRACER.
  1741.  
  1742. - Denis OLIVIER (ChromaGraphics)
  1743. qui a testé les premières ß versions et qui m'a suggéré des améliorations qui
  1744. ont finalement apporté une meilleure finition au programme.
  1745.  
  1746. - Nicolas KELEMEN (DP Tool Club)
  1747. qui a pris le risque d'en parler dans sa lettre 'Les nouvelles d'Ascq' un mois
  1748. avant qu'il ne soit totalement achevé...
  1749.