1.Интерфейс программы


Интерфейс программы достаточно традиционен для текстового редактора. Пункты меню File, Edit, Seach, Text, Editor содержат элементы, близкие по смыслу любому другому текстовому редактору. Интерес представляют элементы Insert , Help. Через меню Help можно войти в справочную систему программы. Это практически единственный источник для знакомства с программой. Документ объемистый и вполне достаточный для изучения программы. Естественно, в Интернете существуют и дополнительные ресурсы. Язык справочной системы - английский. Сцена - это десятки, а порой и сотни строк нетривиального текста. Для этой кропотливой работы нужен помощник. Help содержит большое число примеров (tutotal). Можно скопировать подходящий пример, вставить в сцену, а потом подогнать код для своих целей. Есть более удобный способ. В меню Insert собраны заготовки по всем объектам POV Ray Остается выбрать из списка нужный объект и вставить в сцену. В программу встроена схема автодополнения. Для этого стоит ввести хотя бы несколько символов ключевого слова, а затем понажимать на клавишу TAB.

2.Модификаторы

В POV Ray все объекты могут перемещаться, вращаться и масштабироваться. Для этого используются модификаторы translate, scale, rotate. Все модификаторы используют вектор в качестве аргумента. Например, translate <x,y,z> , где x,y,z - координаты точки, в которую будет перенесен объект. scale <kx,ky,kz> , где kx,ky,kz коэффициенты изменения размеров вдоль соответствующих координатных осей. rotate< Fx,Fy,Fz > , где Fx,Fy,Fz углы поворота вдоль соответствующих координатных осей, причем значения углов подставляют в градусах.

#include "colors.inc"
#include "textures.inc"
camera {location <0, 0,-7> look_at <0,0,0> }
light_source {<0,0,-0.5> color White shadowless}
light_source {<0,-5,-1> color White shadowless}
#declare d=1;
#declare r=0.12;
#declare Yell=<0.9,0.9,0.8>;
plane{<0,0,1>,0.1  texture{pigment{White_Marble}}}
torus {d,r*0.8 rotate<90,0,0> pigment { color rgb <0.5,0,  0> }}
torus {d,r rotate<90,0,0> translate <0,1,0>pigment { color Yell }}
torus {d,r rotate<90,0,0> translate <0,-1,0>pigment { color Yell  }}
torus {d,r rotate<90,0,0> translate <1,0,0>pigment { color  Yell }}
torus {d,r rotate<90,0,0> translate <-1,0,0>pigment { color   Yell }}
torus {d*1.5,r  rotate<90,0,0>scale <1,2.0,3> pigment { color  <0.9, 0.7, 0.7> }}
torus {d*1.5,r  rotate<90,0,0>scale <2.0,1,3> pigment { color  <0.9, 0.7, 0.7> }}
А вот изображение сцены 

Обсудим сцену. 
В POV Ray используется механизм подключаемых файлов. Две первых строки подключают стандартные файлы POV Ray, в которых описаны предопределенные цвета и предопределенные текстуры. Пользователь может создавать собственные подключаемые файлы. Например, отдельные элементы сцены могут быть размещены в подключаемых файлах. Отметим, что в POV Ray много стандартных подключаемых файлов, которые чрезвычайно полезны. Для покраски фона мы используем текстуру с названием pigment{White_Marble}. Как видно текстура имитирует мрамор. Переменная Yell объявляет вектор, что также полезно. Для подсветки сцены используются два источника света со своебразным расположением. В источниках используется директива shadowless, и объекты лишаются тени. Сцена иллюстрирует использованием модификаторов. Последовательность модификаторов чрезвычайно важна. Поворот производится относительно начала координат. Модификатор scale также чувствителен к удалению объекта от начала координат. Отсюда последовательность rotate<...> translate<...> даст одно изображение, а translate<...> rotate<...> - другое.

 

3. Операции


Немногие реальные объекты могут быть собраны из примитивов. В то же время некоторые операции над примитивами могут существенно изменить их внешний вид. Скажем можно взять сферу и внедрить ее в другой объект. В результате объект и сфера приобретают некоторую общую область. Можно изъять общую область из объекта и тем изменить его внешний вид. Это соответствует операции difference. Напротив. можно извлечь только общую область объекта и сферы и также получить новый объект. Такая операция называетсяintersection. Группу объектов можно объединить при помоши операции union. Операции такого рода называются булевыми.

. В качестве примера создадим предмет под названием игральный кубик. В качестве основы возьмем куб, а затем с помощью сфер выдавим на его поверхности необходимое число углублений.

camera {location <6,6,-25> look_at <0,0,0> angle 10}
light_source {<0,1,-5> color rgb <1,1,1>}
light_source {<15,8,-6> color rgb <1,1,1>}

plane{z,4.5 pigment{color rgb < 0.8,1,1>} }
plane{y,-1 pigment{color rgb <0.8,1,0.8 >} }
 difference{
  box{<-1,-1,-1> <1,1,1>pigment{color rgb <0.3, 0.3,1>}}
        sphere{<0,0,-1>0.2 pigment{color rgb 1}}
        sphere{<0.6,0.6,-1>0.2 pigment{color rgb 1}}
        sphere{<-0.6,-0.6,-1>0.2 pigment{color rgb 1}}
        sphere{<0.6,-0.6,-1>0.2 pigment{color rgb 1}}
        sphere{<-0.6,0.6,-1>0.2 pigment{color rgb 1}}
        sphere{<1,0,0.1>0.2 pigment{color rgb 1}}
        sphere{<1,0.6,0.6>0.2 pigment{color rgb 1}}
        sphere{<1,-0.6,-0.6>0.2 pigment{color rgb 1}}
        sphere{<0.6,1,-0.6>0.2 pigment{color rgb 1}}
        sphere{<-0.6,1,0.6>0.2 pigment{color rgb 1}}
              rotate<0,30,0>no_shadow}
 

В операции difference самый первый объект выполняет роль заготовки. Все остальные объекты 'выедают' часть его объема.
Сферы создают лунки на поверхности кубика. Важно отметить, что цвет сфер определяет цвет лунок.

С помощью операции intersection создадим объект, который в оптике называется линзой. Как известно, линза состоит из двух сферических поверхностей. Поэтому возьмем две сферы и расположим их так, чтобы они частично пересекались.

Теперь остается извлечь их общую объемную область.
Создадим сцену 

#include "colors.inc"
#include "textures.inc"
light_source { <0,20,-20> color White shadowless}
camera {location <3,6,-15> look_at <0,0,0> angle 10}
plane{<0,0,1>,0.1  texture{pigment{Y_Gradient}}}
intersection{
 sphere {<-1,0,0>,1.5 pigment{color rgb <1,1,1,0.2,0.4>}}
 sphere {<1,0,0>,1.5 pigment{color rgb <1,1, 1,0.2,0.4>}}
 cylinder{<-1,0,0> <1,0,0> 1 pigment{White}} }
 
А вот ее изображение
Примечание
При оформлении текста сцены можно не обращать внимание на количество пробелов. Парсер автоматически удаляет лишние.

Комментариев нет:

Отправить комментарий