Scarica l'intero archivio delle opere in HTML in un unico file .zip

oppure vai alla selezione Liber Liber di classicistranieri.com

 

Questo sito usa dei cookie per migliorare la vostra esperienza di navigazione. Continuando la navigazione accettate l'uso dei cookie (Altre informazioni)

4.4.11        Toro


Un toro può essere pensato come una ciambella o un tubo richiuso. E' un oggetto molto utile in molti tipi di costruzioni CSG, così POV-Ray ha adottato questa superficie polinomiale di 4° ordine come una primitiva. La sintassi per il toro è talmente semplice da renderlo un oggetto molto comodo con cui lavorare, una volta imparato cosa significano i due valori numerici. Invece di fare una lezione sull'argomento, facciamone uno e sperimentiamoci un po' sopra.
Creiamo un file di nome tordemo.pov e lo editiamo come segue :

#include "colors.inc"
camera {
location <0, .1, -25>
look_at 0
angle 30
}

background { color Gray50 } // per vederlo meglio
light_source{ <300, 300, -1000> White }
torus { 4, 1 // raggi maggiore e minore
rotate -90*x // per vederlo da sopra
pigment { Green }
}

Tracciamo la scena e vediamo cosa succede.

Fig. 52-Toro

Bene, è una ciambella. Proviamo a cambiare i valori del raggio maggiore e minore e vediamo cosa succede. Li modifichiamo come segue :

torus { 5, .25 // raggi maggiore e minore

Fig. 53- Toro più sottile

Questo sembra di più un hula-hoop. Proviamo questo :

torus { 3.5, 2.5 //raggi maggiore e minore

Fig. 54-Toro

Ehi ! Una ciambella con un serio problema di peso !
Con una sintassi così semplice, non c'è molto altro che possiamo fare con un toro a parte cambiargli la texture...o si ? Vediamo... i tori sono oggetti molto utili in CSG. Tentiamo un piccolo esperimento. Facciamo la differenza tra un toro ed un parallelepipedo :

difference {
torus { 4, 1
rotate x*-90 // così possiamo vederlo da sopra
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}

Fig. 55- Mezzo toro

Interessante...un mezzo toro. Ora ne aggiungiamo un altro ruotato dall'altra parte. Però, dichiariamo il primo mezzo toro e le trasformazioni necessarie in modo da poterlo riutilizzare :

#declare Half_Torus = difference { // Half Torus significa "mezzo toro"
torus { 4, 1
rotate -90*x // così possiamo vederlo da sopra
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}

#declare Flip_It_Over = 180*x // Flip It Over significa "capovolgilo"
#declare Torus_Translate = 8 // Il doppio del raggio maggiore

Ora creiamo un'unione dei due mezzi tori :

union {
object { Half_Torus }
object { Half_Torus
rotate Flip_It_Over
translate Torus_Translate*x
}
}

Fig. 56- I due mezzi tori sfalsati

Questo ci dà un oggetto a forma di S, ma non riusciamo a vederlo interamente dalla nostra posizione attuale. Aggiungiamo un altro po' di anelli, tre in ogni direzione, spostiamo l'oggetto in direzione +z e ruotiamolo in direzione -y in modo da poterne vedere di più. Notiamo anche che pare esserci un vuoto nel punto dove i mezzi tori si incontrano. Questo è dovuto al fatto che stiamo osservando la scena giacendo sul piano x-z. Cambieremo la coordinata y della macchina fotografica da 0 a 0.1 in modo da eliminare questo inconveniente.

union {
object { Half_Torus }
object { Half_Torus
rotate Flip_It_Over
translate x*Torus_Translate
}
object { Half_Torus
translate x*Torus_Translate*2
}
object { Half_Torus
rotate Flip_It_Over
translate x*Torus_Translate*3
}
object { Half_Torus
rotate Flip_It_Over
translate -x*Torus_Translate
}
object { Half_Torus
translate -x*Torus_Translate*2
}
object { Half_Torus
rotate Flip_It_Over
translate -x*Torus_Translate*3
}
object { Half_Torus
translate -x*Torus_Translate*4
}
rotate y*45
translate z*20
}

Fig. 57- "Serpente" formato da mezzi tori

Renderizzando questa scena vediamo qualcosa di ondulante, serpentiforme, o qualcosa del genere. Carino. Ma vogliamo fare qualcosa di utile, qualcosa che possiamo vedere nella vita reale. Che ne diresti di una catena ? Pensandoci un momento ci accorgiamo che un singolo anello di una catena può essere facilmente realizzato usando due mezzi tori e due cilindri per unire le due metà. Creiamo un nuovo file ed usiamo le stesse impostazioni di macchina fotografica, sfondo, sorgenti luminose e oggetti dichiarati che abbiamo usato in tordemo.pov.

#include "colors.inc"
camera {
location <0, .1, -40>
look_at 0
angle 30
}

background { color Gray50 }
light_source{ <300, 300, -1000> White }
#declare Half_Torus = difference {
torus { 4,1
sturm
rotate x*-90 // così possiamo vederlo da sopra
}
box { <-5, -5, -1>, <5, 0, 1> }
pigment { Green }
}

#declare Flip_It_Over = x*180
#declare Torus_Translate = 8

Ora, facciamo un toro completo usando le due metà :

union {
object { Half_Torus }
object { Half_Torus rotate Flip_It_Over }
}

Questa può sembrare una maniera inutile per fare un toro competo, ma in effetti stiamo per allontanare le due metà in modo da fare spazio per i cilindri. Per prima cosa, aggiungiamo prima del blocco union il cilindro dichiarato :

#declare Chain_Segment = cylinder { <0, 4, 0>, <0, -4, 0>, 1
pigment { Green }
}

Poi aggiungiamo due segmenti di catena all'unione e li trasliamo in modo che si allineino col raggio minore del toro su entrambi i lati :

union {
object { Half_Torus }
object { Half_Torus rotate Flip_It_Over }
object { Chain_Segment translate x*Torus_Translate/2 }
object { Chain_Segment translate -x*Torus_Translate/2 }
}

Ora trasliamo i due mezzi tori di +y e -y in modo che le estremità tronche si incontrino con le estremità dei cilindri. Questa distanza è uguale alla metà del valore Torus_Translate precedentemente dichiarato :

union {
object { Half_Torus
translate y*Torus_Translate/2
}
object { Half_Torus
rotate Flip_It_Over
translate -y*Torus_Translate/2
}
object { Chain_Segment
translate x*Torus_Translate/2
}
object { Chain_Segment
translate -x*Torus_Translate/2
}
}

Renderizziamo questa scena e voilà !

Fig. 58-Anello di una catena

Un anello di una catena. Ma non abbiamo ancora finito ! Chi ha mai sentito parlare di una catena verde ? Preferiremmo invece usare un bel colore metallico. Per prima cosa, eliminiamo tutti i blocchi pigment nelle dichiarazioni di tori e cilindri. Poi aggiungiamo queste righe prima di union :

#declare Chain_Gold = texture {
pigment { BrightGold }
finish {
ambient .1
diffuse .4
reflection .25
specular 1
metallic
}
}

E quindi aggiungiamo la texture all'unione e dichiariamo l'unione come un singolo anello :

#declare Link = union {
object { Half_Torus
translate y*Torus_Translate/2
}
object { Half_Torus
rotate Flip_It_Over
translate -y*Torus_Translate/2
}
object { Chain_Segment
translate x*Torus_Translate/2
}
object { Chain_Segment
translate -x*Torus_Translate/2
}
texture { Chain_Gold }
}

Ora facciamo un'unione di due anelli. Il secondo dovrà essere traslato di +y in modo che la sua parete interna si incontri appena con la parete interna dell'altra maglia, proprio come gli anelli di una catena. Questa distanza è il doppio della distanza Torus_Translate meno 2 (due volte il raggio minore). Si può descrivere con l'espressione :

Torus_Translate*2-2*y

E noi dichiariamo l'espressione come segue :

#declare Link_Translate= Torus_Translate*2-2*y

Nella parte relativa all'oggetto, useremo questo blocco per moltiplicarlo in modo da creare altri anelli. Ora, ruotiamo il secondo anello di 90*y in modo che sia perpendicolare al primo, come gli anelli di una catena. Infine, scaliamo l'unione di 0.25 in modo da poter vedere l'intera cosa :

union {
object { Link }
object { Link translate y*Link_Translate rotate y*90 }
scale .25
}

Renderizziamo questa scena e vedremo un paio di anelli molto realistico.

Fig. 59-Due anelli

Se vogliamo fare un'intera catena, dobbiamo dichiarare l'unione vista sopra e creare un'altra unione di questo oggetto dichiarato. Dobbiamo essere sicuri di rimuovere la frase scale dall'oggetto dichiarato :

#declare Link_Pair =
union {
object { Link }
object { Link translate y*Link_Translate rotate y*90 }
}

Ora dichiariamo la nostra catena :

#declare Chain = union {
object { Link_Pair}
object { Link_Pair translate y*Link_Translate*2 }
object { Link_Pair translate y*Link_Translate*4 }
object { Link_Pair translate y*Link_Translate*6 }
object { Link_Pair translate -y*Link_Translate*2 }
object { Link_Pair translate -y*Link_Translate*4 }
object { Link_Pair translate -y*Link_Translate*6 }
}

Ed infine, creiamo la nostra catena, con un paio di trasformazioni affinché sia più facile vederla. Queste includono rimpicciolirla di un fattore 10 e ruotarla in modo che si possano vedere bene tutti gli anelli.

object { Chain scale .1 rotate <0, 45, -45> }

Fig. 60-I Tori possono essere usati per creare catene

Renderizziamo questa scena e dovremmo vedere una catena dorata molto realistica che si estende diagonalmente attraverso lo schermo