Aller au menu - Aller au contenu

Icône TP : un Luth

Mise à jour : 01/07/2010
525 visites depuis 7 jours, dont 3 sur ce chapitre classé 218/786
Allez, un dernier petit TP pour finir cette partie : on va faire un luth.
C'est quoi, un luth ??

C'est un instrument de musique... l'ancêtre de la guitare, en fait.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Objectif

On va donc faire un luth... voilà à quoi ça ressemblera :
Image utilisateur
(Je l'ai fait tourner pour mieux le voir.)

Ce n'est pas encore parfait, mais c'est quand même plus beau que la tour, non ?...

Cette fois, je ne vais pas vous laisser plancher sur des consignes avant la correction, mais vous guider pas à pas.

Réalisation

C'est parti ! Commençons notre luth...
Image utilisateur
Comme on le voit sur ce schéma, le luth est composé :
  • d'une demi-sphère allongée à laquelle on a retiré une (demi-)sphère en son centre ;
  • de deux demi-cylindres perpendiculaires ;
  • d'une demi-sphère aplatie.

On pourrait, bien entendu, faire tout ça avec plein de différences. Mais ce serait un peu confus (et surtout moins rigolo...), donc on va utiliser une intersection.
En effet, l'intersection des deux cylindres et des deux sphères permettrait de faire la même chose !

Notre objet sera donc l'intersection d'une union et d'une boîte.
Les coins de la boîte seront <0.6,0,1.50> et <0,-1,-1>, et on va donner la couleur rgb <0.7,0.4,0.4> au tout.
Voilà donc le début de code :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
intersection {
    union {
        ...
    }
 
    box {
        <0.6,0,1.50>
        <-0.6,-1,-1>
    } 
    pigment { rgb <0.7,0.4,0.4> }
}

Reste à compléter l'union !

On va commencer par la sphère allongée principale. C'est à la base une sphère centrée en 0, de rayon 0.5, à laquelle on va appliquer un scale <1,1,1.5> pour l'allonger le long de l'axe des z :
Code : C
1
2
3
4
5
sphere {
    <0,0,0>
    0.5
    scale <1,1,1.5>
}

L'intersection suffit à la couper en deux. En effet, si l'on essaye ce code :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
intersection {
    union {
        sphere {
            <0,0,0>
            0.5
            scale <1,1,1.5>
        }    
    }
    
 
    box {
        <0.6,0,1.50>
        <-0.6,-1,-1>
    }                
    pigment { rgb <0.7,0.4,0.4> }  
}

on obtient quelque chose comme ça :
Image utilisateur

Ensuite, on ajoute le cylindre : il va de <0,0,0> à <0,0,1.5>, et a un rayon de 0.1. Lui aussi sera automatiquement coupé en deux par l'intersection.
Voici donc le code (uniquement de l'union cette fois) :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
union {
    sphere {
        <0,0,0>
        0.5
        scale <1,1,1.5>
    }     
    cylinder {
        <0,0,0>
        <0,0,1.5>
        0.1
    }         
}

Image utilisateur

Le deuxième cylindre part de <0,0,1.5>, et descend jusqu'à <0,-0.5,1.5> ; son rayon est également de 0.1. Voilà ce que ça donne :
Image utilisateur

La sphère aplatie est un petit peu plus délicate à placer : son centre n'est pas 0, et pourtant on va devoir lui appliquer un scale. Il va donc falloir la placer en 0 avant le scale, puis la déplacer avec translate. Son centre final sera <0,-0.5,1.5>, voici donc le code de cette sphère :
Code : C
1
2
3
4
5
6
sphere {
    <0,-0.0,0>
    0.15 
    scale <1,0.6,1>  
    translate <0,-0.5,1.5>
}

Et le résultat :
Image utilisateur

Une seule chose reste à faire : le trou en sphère. Il suffit de remplacer l'union que nous avons par la différence de cette union avec une sphère, de centre <0,0,0> et de rayon 0.25... et, tant qu'on y est, on peut aussi lui donner une couleur différente qui se retrouvera dans le trou (ici, la même que pour le reste, mais plus clair).

Voici donc le code final, avec camera et lumière :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
camera {
    location <0,1,-2.3>
    look_at <0,0,0>
}
 
light_source {
    <2,3,-5>
    rgb <1,1,1>           
}  
 
intersection {                    
    difference { 
        union {
            sphere {
                <0,0,0>
                0.5
                scale <1,1,1.5>
            }
            cylinder {
                <0,0,0>
                <0,0,1.5>
                0.1
            }  
            cylinder {
                <0,0,1.5>
                <0,-0.5,1.5>
                0.1
            }
            sphere {
                <0,-0.0,0>
                0.15 
                scale <1,0.6,1>  
                translate <0,-0.5,1.5>
            }
        }      
        sphere {
            <0,0,0>
            0.25 
            pigment { rgb <0.85,0.6,0.6> }
        }
    }      
    box {
        <0.6,0,1.50>
        <-0.6,-1,-1>            
    }        
    pigment { rgb <0.7,0.4,0.4> }      
}

Image utilisateur

Conclusion

Et voilà, notre luth est fini (quel humour :-° ) !
Vous pouvez toujours changer les couleurs... j'ai choisi celles-ci pour donner une impression de bois, mais rien ne vous oblige à les garder !

Seul problème : on ne le voit pas bien, notre luth !
Mais il n'y a qu'à le tourner ^^ ! En appliquant un rotate <0,-90,0> à notre intersection, on le voit bien mieux :
Image utilisateur

Et voici le code :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
camera {
    location <0,1,-2.3>
    look_at <0,-0.3,0>
}

light_source {
    <2,3,-5>
    rgb <1,1,1>           
}   

intersection {                    
    difference { 
        union {
            sphere {
                <0,0,0>
                0.5
                scale <1,1,1.5>
            }
            cylinder {
                <0,0,0>
                <0,0,1.5>
                0.1
            }  
            cylinder {
                <0,0,1.5>
                <0,-0.5,1.5>
                0.1
            }
            sphere {
                <0,-0.0,0>
                0.15 
                scale <1,0.6,1>  
                translate <0,-0.5,1.5>
            }

        }      
        sphere {
            <0,0,0>
            0.25 
            pigment { rgb <0.85,0.6,0.6> }
        }
    }      
    box {
        <0.6,0,1.50>
        <-0.6,-1,-1>
    }        
    pigment { rgb <0.7,0.4,0.4> }      
    rotate <0,-90,0>
}
Ça y est, c'est notre premier objet qui tente de s'apparenter à quelque chose de réel ( :lol: )...
Je vous l'accorde, ce n'est pas encore extra... on pourrait rajouter de fines cordes, avec des cylindres à rayons très petits ; on pourrait améliorer les couleurs aussi.
Mais le but principal était de s'entraîner avec les opérations CSG et les transformations d'objets.

La première partie est finie, vous devriez à présent pouvoir vous débrouiller pour faire quelques scènes plus ou moins basiques. Mais, c'est vrai, beaucoup reste encore à apprendre : les textures, les isosurfaces, la radiosité ou encore les médias... Ne soyez pas pressés, tout vient à point à qui sait attendre ;) .
Chapitre précédent Sommaire Chapitre suivant

Partager

3 commentaires pour "TP : un Luth"
Note moyenne : 3.96 / 4 (24 votes)
Pseudo Commentaire
Hors ligne Knacki # Posté le 30/08/2006 à 20:58:21

Tu es un exellent professeur !!

Cependant dans ce TP tu ne nous donne même pas la possibilité de faire par nous même le TP et tu donnes la correction :S

J'ai fait le luth avec succès seul, par une autre méthode plus compliqué que la tienne ^^

Bon TP, même si j'aime pas la tronche de l'objet.

Tes tutos ont réussis à ce que je le fasse seul.

Bien joué, merci ^^


Secret (cliquez pour afficher)
17/20
Hors ligne Pierrick77350 # Posté le 05/09/2006 à 17:41:48

lol

Edit Thunderseb : note supprimée.
Hors ligne Knacki # Posté le 24/09/2006 à 13:09:28

Très constructif ;)

Voir tous les commentaires