Descrizioni ed esempi per il raytracer POV-Ray di Friedrich A. Lohmüller
    CSG - Constructive Solid Geometry -
English English English
Français français
Deutsch Deutsch

Home
- POV-Ray Tutorial
- paggina download

  - CSG Constructive
            Solid
            Geometry
    - union + merge
   > difference
    - intersection
        e invers
    - clipped_by
    - superfici
        coincidenti
    - testure e CSG
                                           
Algebra Booleana con Solidi - parte III

"difference"



difference{...}

L'operazion "difference" sottrae tutti gli oggetti seguenti del'oggetto di base. Con questa operazione è possibile di fare un buco ou scavare ou tagliare via ogni forma desiderata. Quest'operazione è come una fresatrice - la forma della fresa è la somma delle forme degli oggetti sequenti al'oggetto di base - il primo oggetto della "difference". Il "buco" riceve la testura del'oggetto sottratto. Questo è la teoria.
La trappola perfida seguente - non solo per i novellini - è il trabocchetto che provoca molte frustrazioni:
Cioè il problema delle "superfici coincidenti". Nel caso che un oggetto a sottrarre non ha le sue superfici univoco fuori del'oggetto dove sarà sottratto, il programma non può decidere se deve sottrarre un punto di questo superfice ou no. E solitamente qualche macchie strane apparìscono dove il buco è aspettato. Questo non è un errore del programma! Quest'effetto ha l'origine nel problemi numerichi perchè è inevitabile che un computer deve arrotondare le cifre. Perciò è essenziale di evitare superfici coincidenti se usiamo quest'operazione.
(Vedi anche "Superfici coincidenti")

Il difetto:
difference{
box{ <-0.5,0.0,-0.1>,< 0.5,1.0,0.1>
     texture{ pigment{ color rgb<1,0.65,0>}
              finish { phong 1.0 }}
   }
box{ <-0.3,0.2,-0.1>,< 0.3,0.8,0.1>
     texture{ pigment{ color Magenta}
              finish { phong 1.0 }}
   }
rotate<0,-30,0> translate<0,0,0>}
La soluzione:
#declare D = 0.001; // just a little bit !
difference{
box{ <-0.5,0.0,-0.1>,< 0.5,1.0,0.1>
     texture{ pigment{ color rgb<1,0.65,0>}
              finish { phong 1.0 }}
   }
box{ <-0.3,0.2,-0.1-D>,< 0.3,0.8,0.1+D>
     texture{ pigment{ color Magenta }
              finish { phong 1.0 }}
   }
rotate<0,-30,0> translate<0,0,0>}


CSG | union + merge | difference | intersection + inverse | clipped_by | superfici coincidenti | testure
top
© Friedrich A. Lohmüller, 2012
www.f-lohmueller.de