ПРОГРАММИРОВАНИЕ в 3D  на основе POV-Ray (версия 3.7 )

Описание мастер-класса
  • 1. Введение
  • 2. Программирование В POV-Ray
  •    2.1 Краткое описание скриптового языка
  •    2.2 Встроенные функции
  •    2.3 Группировка операторов
  • 3. Пример на програмирование
  • 4. Использование функций
  • 5. Примечания к практической работе

1. Введение

POV-Ray бесплатная программа для 3D моделирования. Сцена создается в виде текстового файла. Интерфейс программы максимально простой, поэтому уже на первом занятии можно создать сцену. Программа имеет встроенный набор примитивов и даже сцен. Отличительная особенность программы - мощная система текстурирования и неплохой рендер. Многие возможности программы раскрываются при использовании встроенного скриптового языка.

2.ПРОГРАММИРОВАНИЕ В POV-Ray
2.1 Краткое описание скриптового языка

В POV-Ray встроен мощный скриптовый язык. Ознакомиться с ним можно в Help программы. В целом синтаксис очень похож на синтаксис языка программирования СИ. Например для комментирования используются символы // и /* */.
  • Все операторы языка начинаются с символа #.
  • Объявление переменной завершается символом ;.
  • Имя переменной чувствительно к регистру. Строчные и заглавные символы - это разные символы.
  • Все операторы языка начинаются с символа #.
  • Тип переменных объявлять не надо. Он - универсальный Предназначен для хранения чисел и символов.
  • Все переменные должны быть определены до их первого использования.
  • В языке есть встроенные константы, которые не требуют объявления.
Объявление переменных.
  • Для объявления переменных используются директивы #declare и #local.   #declare - объявляет глобальную переменную.
  • Способ комментирования в стиле СИ.
  • Можно использовать многомерные массивы. Пример объявление массива
Объявление массива. 
 #declare MyArray = array[10] //- одномерный массив #declare MyGrid = array[4][5] //- двумерный массив
Операторы цикла -#while и #for
Пример синтаксиса оператора #while. Оператор #end играет роль операторной скобки.
#declare Count=0;
#while (Count < 5)
  //строки с операторами
  //.......................
  //.......................
 #declare Count=Count+1;
#end
Пример синтаксиса оператора #for. С управляющми операторами и выводом отладочной информации через оператор #debug в окно сообщений
#for (i, 1, 5 ,1)
   #if (i=4)
   #debug "\n*** Output in message window ***\n"
   #else
   #debug concat(str(i*10,0,1), "\r" )
   #end
#end

2.2 Встроенные функции
В состав языка включено большое число функций. Именно они и определяют мощь встроенного языка.. Функции можно разделить на несколько групп
  • Математические функции
  • Функции для работы со строками
  • Функции для генерации случайных чисел
  • Функции для работы с векторами.

2.3 Группировка операторов
Группе операторов можно присвоить имя. А затем работать с ними как с единым целым. В терминах POV-Ray это означает создать объект.
Например можно создать объект MyObject
#declare MyObject =union{
//.......................
//.......................
}
Директива union объединяет все операторы в одно целое. Теперь можно использовать группу операторов по имени. Например
object{MyObject scale<sx,sy,sz> rotate< rx,ry,rz> translate <tx,ty,tz>} 
С помощью операторов scale, rotate, translate объект MyObject можно масштабировать, вращать и перемещать по сцене.

2.4 Создание и использование Мacro
Есть другой способ объединения операторов, позволяющий передавать параметры в структурную единицу. Это аналог подпрограммы со списком параметров. Декларация макро выглядит как
#macro MyMacro( P1, P2 )
//.......................
//.......................
#end
Вызов макро производится, например, так MyMacro( 10, 2 ) . Здесь формальные параметры P1, P2 заменены численными  

3. Пример на програмирование

Применим цикл  #for для создания объекта. Возьмем тороид и будем вращать его вокруг оси Z.
Угол поворота равен 30 градусов. Для раскраски тороидов применим текстуру - зеленый мрамор. Блики создает инструкция phong.


#local Tex=texture{pigment{Jade}finish {phong 1.5 phong_size 50}};
#local R=5;
#for(i,0,180,30)
torus{R,R*0.1 rotate<0,0,i>scale<0.7,1,1> texture{ Tex}} #end 
 
 
4. Использование функций

В POV-Ray встроено множество различных функций. Они могут использоваться для построения поверхностей. Понятно, что разобраться с некоторыми функциями не так просто. Но можно поэкспериментировать с параметрами, в расчете на получение нового зрительнорго образа. Вот первый пример

#declare R=1.3;
#declare F=function {f_mesh1(x,y,z,0.1,0.1,1,0.09,1) - 0.015}
isosurface {
 function { F(f_ph(x*1,y*1,z), f_r(x,y,z)-0.8, f_th(x,y,z)) }
        max_gradient 5
        pigment {rgb <1>}
        finish {phong 0.5 phong_size 10}}
 

 
 
А вот - второй пример.
 
#declare Bend=0.5;
#declare Sharpness=1.0;
isosurface {
  function { f_torus(y-pow(abs(x),Sharpness)*Bend,z,x,0.8,0.1) }
        max_gradient 1.5
        pigment {rgb x}
        finish {phong 1.5 phong_size 50}}


isosurface {
  function { f_sphere(y-pow(abs(x),Sharpness)*Bend,z*2,x,0.6) }
        max_gradient 2.0
        pigment {rgb x}
        finish {phong 1.5 phong_size 50 }
} 
 

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

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