Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
      Objets POV-Ray - Comment faire des objets pour POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- POV-Ray Tutorial

  - Exemples POV-Ray
    Table des matières
  - Architecture
  - Geometrie
  - Technique
    - Échelle
    - Pylônes
    - Garde-fou, Rambarde
    - Pont
    - Tuyaux
    - Bifurcation de Tuyau
    - Robinet d'Arrêt
    - Chaîne
    - Bobine de fil
    - Torpedo
    - Cruise Missile
    - Missile
    - Roue
    - Camion
    - Hélice
    - Avion
    - Canoë
    - Guitare
    - Afficheur 7 segments
    - Câble plat - Nappe plat
    - Harnais de câbles
                                       
 
Bifurcation de Tuyau

Bifurcation de Tuyau

Objets :     isosurface, cylinder.
Méthodes : #declare, #local, #macro, union, difference.
Une forme de base pour une bifurcation de tuyau pour joindre des pipelines, pour un robinet ou pour un robinet d'arrêt..

Nous regardons deux isosurfaces ressemblant à blob.
Les dimensions pour le deux :
#local R1 = 0.50; // rayon de tuyau
#local R2 = 0.35; // rayon de la sphère blob
#local Box_L = 4*R1; // grandeur du box conteneur 
#local Bloby = 0.15, // facteur blob
Premièrement un isosurface en forme de tuyon avec un blob sphérique :
isosurface{ //-----------------------------------
function{ (1+Bloby)
           - pow( Bloby,(sqrt(x*x+y*y)-(R1)))
           - pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2)))
        } // end function
 contained_by{
  box{<-Box_L,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<0.45,1,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface --------------------------
nuts
An isosurface tube with a spherical blob.
Puis un isosurface en forme de tuyaux croisés :
isosurface{ //-----------------------------------
 function{ (1+Bloby)
            - pow( Bloby,(sqrt(x*x+y*y)-(R1)))
            - pow( Bloby,(sqrt(y*y+z*z)-(R2)))
         } // end function
 contained_by{
  box{<-Box_L,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<1,0.7,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface --------------------------
cross
An isosurface of crossed tubes.

Comment peut on faire une Bifurcation de Tuyau :
Ici nous devons restreindre les conteneurs de tous les deux isosurfaces à la moitié correspondant.
Puis nous devons assembler les deux parties à l'aide de "union".
union{
isosurface{ //-----------------------------------
function{ (1+Bloby)
           - pow( Bloby,(sqrt(x*x+y*y)-(R1)))
           - pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2)))
        } // end function
 contained_by{
  box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<0.45,1,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface 1 ------------------------

 function{ (1+Bloby)
            - pow( Bloby,(sqrt(x*x+y*y)-(R1)))
            - pow( Bloby,(sqrt(y*y+z*z)-(R2)))
         } // end function
 contained_by{
  box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<1,0.7,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface 2 ------------------------

} // end of union
cross
Deux demi-isosurfaces.
cross
L'union de isosurfaces d'une bifurcation de tuyau.

L'adaptation de la bifurcation de tuyau pour joindre de autres tuyaux :
Parce que cette façon de isosurfaces n'ont pas les rayons R1 respectivement R2 exactement au bord de leurs conteneurs nous devons ajuter un valeur de correction aux rayons des isosurfaces.
(Ce valeur n'est pas calculé exactement - nous utilisons seulement la méthode de "tentative et erreur" !)
Note: Se vous changez le rayons
vous devez adapter ce valeur de correction !


Pour alléger l'adaptation le rayons du isosurface aux rayons de tuyaux externes, nous adjoindrons aussi quelques cylindres de test.
#local Cor = 0.06; isosuface radius correction
#local Test_Cylinders_ON = 1; // 1 = on; 0 = off
//-----------------------------------------------
union{
isosurface{ //-----------------------------------
 function{ (1+Bloby)
       - pow( Bloby,(sqrt(x*x+y*y)-(R1+Cor)))
       - pow( Bloby,(sqrt(y*y+z*z+x*x)-(R2+Cor)))
         } // end function
 contained_by{
  box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<0.45,1,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface 1 ------------------------

 function{ (1+Bloby)
           - pow( Bloby,(sqrt(x*x+y*y)-(R1+Cor)))
           - pow( Bloby,(sqrt(y*y+z*z)-(R2+Cor)))
         } // end function
 contained_by{
  box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>}}
 accuracy 0.001
 max_gradient 7
 texture{ pigment{ color rgb<1,0.7,0>}
          finish { phong 1 reflection 0.10}}
} // end of isosurface 2 ------------------------
// ----------------------------------------------
#if(Test_Cylinders_ON=1)
 union{ // test
  cylinder{<0,0,Box_L>,<0,0,Box_L+0.5*R1>,R1}
  cylinder{<0,0,-Box_L-0.5*R1>,<0,0,-Box_L>,R1}
  cylinder{<Box_L,0,0>,<Box_L+0.5*R1,0,0>,R2}
  texture{  pigment{ color rgb<1,0.7,0>} }
 } // end of union 'test'
#end // of Test_Cylinders_ON
} // end of union -------------------------------











tube fork with test cylinders
La bifurcation de tuyau avec cylindres de test

Creuser l'intérieur et rassembler tous dans un macro
compléte la bifurcation de tuyau :
Le macro "Tube_Fork_000":
//---------------------------------------------
#macro Tube_Fork_000 (
    R1, // ~0.50,
    R2, // ~0.35 ~0.65,
    Tube_D, // ~0.05, tube material thickness
    Bloby, // blob factor, // 0.1~0.002,
    Cor, //   radius correction,
    Test_Cylinders_ON, // on = 1; off = 0,
  ) // ----------------------------------------
//---------------------------------------------
#local D = 0.0001; // just a little bit !!!
#local Box_L = 4*R1;
//---------------------------------------------
//------------- default textures --------------
#ifndef (Slide_Body_Texture)
#declare Slide_Body_Texture =
 texture{ pigment{ color rgb<1,1,1>*0.85}
          normal { bumps 0.05 scale 0.3005}
          finish { phong 0.7 reflection 0.05}}
#end
#ifndef (Slide_Inside_Texture)
#declare Slide_Inside_Texture =
 texture{ pigment{ color rgb<1,1,1>*0.7}}
#end
#ifndef (Test_Tube_Texture)
#declare Test_Tube_Texture =
  texture { pigment { color rgb<0.7,0.3,1>}}
#end
//-----------....----------- main part --------
union{ // main union

#if(Test_Cylinders_ON=1)
union{ // 1
#end

difference{
 union{
 isosurface{ //--------------------------------
  function{
    (1+Bloby)
    - pow( Bloby, ( sqrt(x*x+y*y)-(R1+Cor) ) )
    - pow( Bloby,( sqrt( y*y+z*z)-(R2+Cor) ) )
  }// end function
  contained_by{
   box{<0,-Box_L,-Box_L>,<Box_L,Box_L,Box_L>} }
  accuracy 0.001
  max_gradient 7
 } // end of isosurface -----------------------

 isosurface{ //--------------------------------
  function{
    (1+Bloby)
    - pow( Bloby, ( sqrt(x*x+y*y)-(R1+Cor) ) )
    - pow( Bloby,( sqrt(y*y+z*z +x*x)-(R2+Cor) ) )
  }// end function
  contained_by{
   box{<-Box_L,-Box_L,-Box_L>,<0,Box_L,Box_L>}}
  accuracy 0.001
  max_gradient 7
 } // end of isosurface -----------------------

 texture{Slide_Body_Texture}
 }// end of union

 cylinder{ <0,0,-Box_L-D>,<0,0,Box_L+D>,R1-Tube_D
           texture{ Slide_Inside_Texture }}
 cylinder{ <0,0,0>,<Box_L+D,0,0>, R2-Tube_D
           texture{ Slide_Inside_Texture }}
}//end of difference  //

#if(Test_Cylinders_ON=1)
 union{ // 'test'
  cylinder{<0,0, Box_L>,<0,0,Box_L+0.5*R1>, R1}
  cylinder{<0,0,-Box_L-0.5*R1>,<0,0,-Box_L>,R1}
  cylinder{<Box_L,0,0>,<Box_L+0.5*R1,0,0>,  R2}
  texture { Test_Tube_Texture }}
 }// end union 'test'
} // end union of '#if(Test_Cylinders_ON = 1)'
#end // Test_Cylinders_ON=1
// ---------

} // end union main
#end // -------------------------- end of macro

Et ici un exemple typique pour comment utiliser ce macro :
// -------------------------- optional textures  
#declare Slide_Body_Texture =
  texture{ pigment{ color rgb<0.75,1,0>}
           finish { phong 1 reflection 0.1}}
#declare Slide_Inside_Texture =
  texture{ pigment{ color rgb<0.3,0.7,0>*1.1}
           finish { phong 1}}
#declare Test_Tube_Texture =
  texture{ pigment { color rgb<1,0.7,0>}
         } // end of texture
// ----------------------------------------------
object{
  Tube_Fork_000 (
  // total container box length = 4*R1
  0.50, // R1, // main tube radius:  1 ~ 0.25
  0.35, // R2, // side tube radius:  1.5 ~ 0.20
  0.05, // Tube_D, // tube material thickness
  0.15, // Blobfactor; // 0.1~0.002 ; max~0.2!!
  0.06, // radius correction, ~ 0.06
  0, // Test_cylinders_ON;  on = 1; off = 0
  ) // ------------------------------------------
  // rotate <0,0,90>
  translate <0,0,0>
} // -------------------------------------------- 



tube fork macro
Le macro Tube_Fork_000.
La description de la scène
pour POV-Ray
"Tube_Fork_000_6.txt" ou "Tube_Fork_000_6.pov"


tube fork macro
Le macro Tube_Fork_000
avec R1 = 0.35, R2 = 0.50,
et rotate<0,0,90>.










































Tube Fork


Pour téléchargement de cette forme comme un Objet prêt à l'usage pour POV-Ray
dans un fichier include avec un macro
et pour fichiers d'exemples voyez ici
Page de Objets POV-Ray - Tuyaux
 
top

© Friedrich A. Lohmüller, 2009
www.f-lohmueller.de