Рассмотрим построение сложных объектов с помощью команд объединения, пресечения и симметрической разности.
#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>
}