Урок 4. Создание сложных объектов.

Автор: А.Г. Логов               

 

Рассмотрим построение сложных объектов с помощью команд объединения, пресечения и симметрической разности.


#include "colors.inc"
#include "textures.inc"

 camera {
   location <3, 8, -17>
   look_at <-2, 3, 0>
 }

 light_source { <-6, 100, 100> White } 
 background{NeonBlue}

 plane{ y,-6
    pigment { checker White,Red scale 3 }
 }
 


В примере 3 мы создавали столик непосредственно в месте его расположения. Но если нужно создать два таких столика или просто чуть отодвинуть столик, то придеться пересчитывать все координаты. Чтобы упростить процесс создания объекто.в лучше сначала описать объект, а затем его установить в нужном сесте. делается это следующим образом


 #declare Table=intersection{  //#declare
                               // - начальная команда 
                               // для описания создаваемого нами объекта 
                               // Table - это название для создаваемого 
                               // нами объекта. Лучше всего в этом месте 
                               // писать то, что мы создаем. Если мы 
                               // создаем стол, то надо писать Table. 
                               // Но если вы напишите, что-то другое 
                               // то ошибки в этом не будет. 
                               // Компьютер поймет любое название. 
                               // Например, вместо Table, можно ввести Room. 
                               // intersection - команда пересечения объектов, 
                               // из которых мы конструируем наш объект.
                               // Здесь мы вырезаем из 
                               // шара верхнюю часть плоскостью. 
                               // Наша цель сделать из шара нижнюю полусферу.
           sphere{<0,0,0>, 
                  3 
                  pigment {wood scale 0.1}
           }

           plane{y, 0.1 
                   finish{
                      reflection 1
                   }           //Завершение описания свойств finish.
           }                   //Завершение описания plane.
 }  

Получаем следующую сцену.





Продолжаем конструировать столик.Отрезаем нижнюю часть сферы.

 #declare Table1=difference { // difference- симметрическая разность между объектами

   object{                    // Вызов ранее созданого объекта Table  
       Table
   }

   plane{y, -0.1
       finish{
          reflection 1
       }
    }

 }        





И наконец приделаем к столику цилиндрические ножки.


 #declare Table2= union{  // Union - обьединение объектов

   object{
     Table1
   }
 
                          //Следующие команды - это описание ножек.
 
   cylinder {
     <-4, -6, 0>,
     <-2.7, 0, 0>,
     0.2
     pigment {color Black }
   }

   cylinder {
     <4, -6, 0>,
     <2.7, 0, 0>,
     0.2
     pigment {color Black }
   }

   cylinder {
     <0, -6, 4>,
     <0, 0, 2.7>,
     0.2
     pigment {color Black}
  }

  cylinder {
     <0, -6, -4>,
     <0, 0, -2.7>,
     0.2
     pigment {color Black }
 }

}




Сделаем еще один столик но с шаром на столешнице.

 
 #declare Table3= union{ 

  object{
         Table2
  }

                         // Поместим на наш столик шар. 
                         // Хотя он не является деталью 
                         // столика, но мы эго опишем 
                         // как предмет, который принадлежит 
                         // нашему столу. В дальнейшем, 
                         // при вызове Table3 будут 
                         // появляться столик и шар вместе.

  sphere{<0,1,0>, 1
     pigment {wood scale 0.1}
  }
 }



Осталось вызвать все построеные объекты. С помощью object выставляем все наши созданые столики.

 

 object{
   Table2                 //В этом месте вызывается столик Table2
 }


 object{ 
   Table3                 //В этом месте вызывается столик с шаром, но  
   translate <10,0,40>    //он сдвинут командой translate 
                          //по оси ОХ на +5, 
                          //по оси ОY на 0 и 
                          //по оси ОХ на +40 от исходной точки его построения
 }

 object{ 
   Table2                 //В этом месте вызывается 3 столик
   translate <-10,0,30>
 }


  object{
    Table2                //В этом месте вызывается 4 столик
    translate <-15,0,0>
  }



  object{
    Table3                //В этом месте вызывается 5 столик  
    translate <-40,0,50>
  }



Получаем в итоге следующую сцену



Полный листинг скрипта урока 4.

 


#include "colors.inc"
#include "textures.inc"

 camera {
   location <3, 8, -17>
   look_at <-2, 3, 0>
 }

 light_source { <-6, 100, 100> White } 
 background{NeonBlue}

 plane{ y,-6
    pigment { checker White,Red scale 3 }
 }
 
 #declare Table=intersection{  
           sphere{<0,0,0>, 
                  3 
                  pigment {wood scale 0.1}
           }

          plane{y, 0.1 
                   finish{
                      reflection 1
                   }          
          }                    
 }
 
 #declare Table1=difference { 

   object{                   
       Table
   }

   plane{y, -0.1
       finish{
          reflection 1
       }
    }

 }  
 
 
 #declare Table2= union{  

   object{
     Table1
   }



   cylinder {
     <-4, -6, 0>,
     <-2.7, 0, 0>,
     0.2
     pigment {color Black }
   }

   cylinder {
     <4, -6, 0>,
     <2.7, 0, 0>,
     0.2
     pigment {color Black }
   }

   cylinder {
     <0, -6, 4>,
     <0, 0, 2.7>,
     0.2
     pigment {color Black}
  }

  cylinder {
     <0, -6, -4>,
     <0, 0, -2.7>,
     0.2
     pigment {color Black }
  }
   
}  

 #declare Table3= union{ 

   object{
         Table2
   }

                        

   sphere{<0,1,0>, 1
     pigment {wood scale 0.1}
   }
 } 
 
 
  object{
    Table2                 
  }


  object{ 
   Table3                 
   translate <10,0,40>   
  }

  object{ 
   Table2                 
   translate <-10,0,30>
  }


  object{
    Table2                
    translate <-15,0,0>
  }

 
  object{
    Table3                
    translate <-40,0,50>
  }