Кроме сферы POV-Ray может создавать и другие объекты. Сначала мы рассмотрим несколько простейших объектов -- бокс, цилиндр, конус и плоскость -- а затем нарисуем их.

Бокс

Бокс или прямоугольный параллелепипед создается следующим образом:

box
{ <x1,y1,z1>,<x2,y2,z2>
}

Пара векторов задает расположение противоположных углов бокса. Обычно первый вектор содержит минимальные x-, y- и z-координаты, а второй -- максимальные, но подойдут и любые два противоположных угла. Например, следующий код

box
{ <-2,0,-1>,<1,2,3>
  pigment { color Blue }
}

создаст синий бокс с размерами: 3 единицы длины по оси {\(X\)} (от -2 до 1), 2 единицы вдоль оси {\(Y\)} (от 0 до 2) и 4 единицы по оси {\(Z\)} (от -1 до 3).

Чтобы показать, какие именно углы используются для определения бокса, обозначим их маленькими сферами зеленого и синего цветов

sphere
{ <-2,0,-1>, .2
  pigment { color Green }
}
sphere
{ <1,2,3>, .2
  pigment { color Red }
}

и разместив камеру в точке <3,5,-10>, получим

corners.png

Цилиндр

cylinder
{ <x1,y1,z1>,<x2,y2,z2>,Radius
}

Пара векторов <x1,y1,z1>, <x2,y2,z2> определяет положение оснований цилиндра, Radius задает его радиус. Например:

cylinder
{ <0,-1,0>,<0,1,0>,0.5
}

-- это вертикальный цилиндр, протянувшийся вдоль оси {\(Y\)} от -1 до 1 с радиусом 0.5.

Вам еще не надоел черный фон на сценах? Если надоел, то его можно изменить командой background. Вот как черное можно сделать белым:

background { color White }

Возьмем коричневый цилиндр и добавим в его описание всего одно ключевой слово -- open:

cylinder
{ <-1,4,-5>,<1,-4,5>,2 open
  pigment { color Brown }
}

В результате получим открытую поверхность:

cylinder.png

Так можно "открыть" любую замкнутую поверхность.

Чтобы отверстие было лучше видно, мне пришлось развернуть цилиндр. Мы научимся вращать объекты в главе 2.

Конус

Задается подобно цилиндру, только нужно указать радиус каждого из оснований:

cone
{ <x1,y1,z1>,Radius1,<x2,y2,z2>,Radius2
}

Плоскость

Объект plane определяет плоскость:

plane
{ <x,y,z>,Distance
}

Вектор <x,y,z> задает внешнюю нормаль к плоскости. Нормалью называют единичный вектор, направленный перпендикулярно к поверхности. Вообще говоря, в одной точке может быть две нормали: у замкнутой поверхности (например, сферы) одна нормаль "торчит" внутрь, а другая -- наружу. Последняя, естественно, называется внешней. Для плоскости направление внешней нормали задается по договоренности. Представим себе горизонтальную плоскость, например, пол. Для нее внешней нормалью считается единичный вектор, направленный вдоль оси {\(Y\)}: <0,1,0>.

Distance задает расстояние плоскости от начала отсчета. Положительные значения этого расстояния перемещают плоскость в направлении, указанном нормалью, отрицательные -- в противоположную сторону. Например, если мы захотим переместить наш "пол" на две единицы длины вниз от начала координат, то это можно записать так:

plane
{ <0,1,0>,-2
}

Единичные векторы осей координат задаются встроенными переменными: x = <1,0,0>, y = <0,1,0>, z = <0,0,1>, так что предыдущий пример можно переписать следующим образом:

plane
{ y,-2
}

Пример

Пора нарисовать все знакомые нам объекты.

По сравнению с первым примером передвинем камеру немного выше (на 10 единиц) и отодвинем ее подальше от монитора (на -20 вместо -10). Затем добавим синий бокс слева от сферы, голубой конус -- справа, а коричневый цилиндр разместим позади нее. И все это расположим на белой плоскости:

#include "colors.inc"

camera
{ location <0,10,-20>
  look_at <0,0,0>
  angle 35
}

light_source { <10,20,-20> color White }
light_source { <-200,0,0> color Red }

sphere
{ <0,0,0>,2
  pigment { color Yellow }
}
box
{ <-2.5,-2,-2>,<-6.5,2,2>
  pigment { color Blue }
}
cone
{ <4.5,-2,0>,2,<4.5,2,0>,0
  pigment { color Cyan }
}
cylinder
{ <0,-2,4.5>,<0,2,4.5>,2
  pigment { color Brown }
}
plane
{ <0,1,0>,-2
  pigment { color White }
}

Вот что получится после трассировки:

objects.png

Обратите внимание, что x-координата у первого вектора, задающего положение бокса меньше, чем у второго.



Комментарии

comments powered by Disqus