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}} }
Примечание
При оформлении текста сцены можно не обращать внимание на количество пробелов. Парсер автоматически удаляет лишние.
Комментариев нет:
Отправить комментарий