Язык описания

В языке описания существует 4 вида разделов, каждый из которых имеет свое обозначение:
‘objects‘
‘models’
‘include’
‘scene’

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

Тем не менее, все объявления, которые Вы будете делать, относятся к этим видам разделов, для каждого из которых существуют определенные правила интерпретации.

Замечания:
Обозначение вектора – ‘(x,y,z)’, где x,y,z – вещественные значения.
При проецировании
x – будет влиять на горизонтальное расположение (увеличение – вправо)
z – будет влиять на вертикальное расположение (увеличение - вверх)
y – будет влиять на глубину (дальность) (увеличение - вперед)

Будьте внимательны, так как в других системах за глубину отвечает координата z,
а y – отвечает за вертикальное расположение на экране, причем увеличение – вниз.
Планируется ввести директиву интерпретатору, позволяющую, использовать стандартные обозначения координат.



Описание геометрических фигур (примитивов)

раздел <objects> - описание геометрических примитивов, из которых строятся модели

примитив <plate> - плоскость
plate <точка на плоскости>-<нормаль>
Пример: 'plate (0,0,0)-(0,0,1)'

примитив <spher> - сфера
spher <центр сферы>-<радиус>
Пример: 'spher (0,0,0)-50'

примитив <cilin> - цилиндр
cilin <точка 1 на оси цилиндра>-<точка 2 на оси цилиндра>-<радиус цилиндра>
Пример: 'cilin (-50,0,0)-(50,0,0)-50'

примитив <conus> - конус
conus <вершина конуса>-<точка на оси конуса>-<радиус конуса в точке на оси>
Пример: 'conus (0,0,50)-(0,0,0)-50'
Примечание: конус симметричен относительно вершины,
поэтому иногда требуется ограничивать его у вершины специально.

примитив <elips> - эллипсоид вытянутый по основной оси
elips <полюс 1 эллипса>-<полюс 2 эллипса>-<радиус по экватору эллипса>
Пример: 'elips (0,0,50)-(0,0,-50)-20'

примитив <tykva> - эллипсоид сплюснутый по основной оси
tykva <полюс 1 эллипса>-<полюс 2 эллипса>-<радиус по экватору эллипса>
Пример: 'tykva (0,0,20)-(0,0,-20)-50'
Примечание: планируется удалить примитив типа <tykva>, компилятор будет сам
определять тип эллипсоида и создавать соответствующий математический объект.

примитив <parab> - параболоид
parab <вершина параболоида>-<точка на оси параболоида>-<радиус параболоида в точке на оси>
Пример: 'parab (0,0,50)-(0,0,0)-50'

примитив <torro> - торроид (бублик)
torro <центр бублика>-<вектор оси бублика>-<радиус кольца>-<толщина кольца/2>
Пример: 'torro (0,0,0)-(0,0,1)-50-10'

примитив <hyper> - гиперболоид (однополосный)
hyper <центр гиперболоида>-<вектор оси>-<расстояние от фокуса до оси>-<диаметр горла>
Пример : 'hyper (0,0,0)-(0,0,1)-50-80'

Примечание:
После первого объявления, относящегося к разделу <objects>,
индексирование фигур производится относительно него (с нулевого индекса).



Описание моделей из фигур

раздел <models> - описание моделей

<индекс примитива>,<цвет[/коэф.отражения]>[("имя файла текстуры",<параметры наложения>)],<логическое выражение ограничения>

Пример:
3,2,
0,$FF00FF,O1+O2*(^O4+O3)
1,$FF7F7F7F,O0*O2
2,$FF00/0.5 ( “texture.bmp”,(50,0,0),(0,0,-50) ),

Примечание:
1) <индекс примитива> - номер примитива из которого состоит модель,
описанного в разделе <objects> предваряющего раздел <models>, первый индекс = 0
2) <цвет> - можно задать 2 способами
первый - цифрой 0,1,2,3 означающий red,green,blue,white
второй - шестнадцатиричным кодом $AARRGGBB, где AA - коэффициент прозрачности,
AA=0 - не прозрачный, AA=FF - полностью прозрачный; RR,GG,BB - цветовые компоненты
Через дробь можно указать коэф. отражения: (0..1) 0 – нет отражения, 1 - зеркало
3) <логическое выражение ограничения> - запрещает отображение некоторых точек примитива.
Если для некоторой точки на поверхности примитива логическое выражение ограничения = true, то она не отображается.
Выражение ограничения состоит из логического сочетания фукнций ограничения примитивов, которые задаются так O<номер ограничивающего примитива>.
Функция ограничивающего примитива дает true, если точка ограничиваЕМОГО примитива внутри ограничиваЮЩЕГО примитива. Для плоскости функция возвращает true если точка находится в той полуплоскости, куда ‘смотрит’ нормаль. В выражении можно использовать скобки (), +<ИЛИ>, *<И>, ^<НЕ>
4) <параметры наложения> - зависят от типа фигуры, на которую накладывается изображение текстуры, параметры наложения указываются через запятую.
- для плоскости: это координаты 2-х или 3-х точек плоскости, соответствующие: правому верхнему и левому нижнему углу текстуры, и опционально левому верхнему углу текстуры (если координата опущена, то ей считается <точка на плоскости> в описании plate)
- для сферы: это <вектор вертикальной оси> и <вектор начального углового смещения>, который должен быть перпендикулярен вектору оси. Координата y на текстуре откладывается вдоль оси, а координата x – откладывается по угловому смещению относительно вектора начального углового смещения.
- для цилиндра, конуса, эллипсоидов, параболоида и торроида: указывается только <вектор начального углового смещения>, который должен быть перпендикулярен основной оси фигур. Координаты x на текстуре определяются как на сфере. Отличие в определении координаты y на текстуре между фигурами замкнутыми по основной оси (эллипсоид и торроид) и незамнутыми (цилиндр, конус, параболоид). Для незамкнутых по основной оси фигур координата y на текстуре определяется в пределах точек на основной оси фигур,указанных в описании фигур. Проекции точек поверхности на основную ось фигуры, выходящие за пределы указанных в описании точек на оси, смещаются по оси на расстояние, кратное расстоянию между точками, указанными в описании фигур, так чтобы они оказались в этих пределах.

Поддерживаются следующие форматы текстур: bmp, jpg, jpga.

Подробнее о jpga: это специальный формат файла, содержащий помимо обычного изображения в формате цветного jpg, альфа-канал в виде черно-белого (градации серого) изображения jpg такой же размерности. Формат файла: структура из 3х целых чисел по 4 байта: число изображений в файле =2, адрес-смещение в файле основного jpg изображения, адрес-смещение в файле альфа изображения, далее идут данные основного jpg изображения и данные альфа изображения. При использовании прозрачных текстур следует задать многоуровневый z-буфер.

ТекстурыРезультат


Спец. модель-объект – Габарит.

Габарит предназначен для ускорения обсчета моделей.
(все модели указанные после габарита будут обсчитываться только внутри проекции габарита)

gabar <коорд. узла1>-<к. узла2>-...-<к. узлаN> <тип габарита/список узлов ребер>

Пример:
'gabar (-1,-1,1)-(-1,1,1)-(1,1,1)-(1,-1,1)-(-1,-1,-1)-(-1,1,-1)-(1,1,-1)-(1,-1,-1) cube'
'gabar'
'gabar (-120,-20,120)-(-120,20,120)-(120,20,120)-(120,-20,120)-(-120,-20,-120)-(-120,20,-120)-(120,20,-120)-(120,-20,-120) (2,-3,-4,-1,-5,-8,-7,-6,-2,-1, 5,-6, 4,-8, 3,-7)'

Примечание:


Спец. модель-объект - Полигон.

Эта конструкция языка описания предназначена для получения стредствами движка стандартных полигонов (выпуклых многоугольников)
poly <список узлов>,<цвет[/коэф.отражения]>[("имя файла текстуры",<параметры наложения>)],[<логическое выражение ограничения>]

В качестве <списка узлов> можно указывать:
  изображения векторов или переменные векторного типа, разделенные тире "-"
  массив векторов одной переменной с квадратными скобками
<Цвет и коэффициент отражения> указывается также, как при описании модели
Описание наложения текстуры (в скобках после цвета): указывается имя файла с изображением (в кавычках), далее через запятую координаты на текстуре, соответствующие первым 2-3м узлам полигона, если третья точка не указана, то интерпретатор рассчитает ее сам.
<Логическое выражение ограничения> - тоже самое, что и в описании обычных моделей.

Пример:
vec v[] = ((-50,0,50), (50,0,50),(50,0,-50), (-50,0,-50))
poly v[], 3("k.jpeg",(100,-100),(300,100)),
poly (-100,-100,100)-(100,-100,100)-(0,0,0),3,O0

Примечание:


Спец. модель-объект Линии/Точки

Эта конструкция языка описания предназначена для рисования линий и точек в трехмерном пространстве.
line <список узлов> <список соединений>, <цвет>, [<логическое выражение ограничения>]

<список узлов> - представляет собой изображения или переменные векторов, разделенные тире, либо массив векторов одной переменной с “[ ]”.
<список соединений> - набор индексов соединяемых линиями узлов (перечисляются через запятую, набор указывается в скобках, первый индекс - 1) или массив целых чисел одной переменной с "[ ]". Положительный индекс - начальный в последовательности, отрицательный - последующий. Если последующих индексов нет, отображается только точка начального узла. Если список соединений "опущен", то программа считает, что указанные узлы последовательно соединены от 1 до N.
Вместо списка соединений допускается использовать служебные слова:
  cicle - зацикленная последовательность соединений узлов.
  points - отображаются только точки с координатами узлов.
<цвет> - указывается также, как при описании модели (возможно указывать альфа-канал)
<логическое выражение ограничения> - тоже, что и при описании модели

Пример:
line var1-var2-var3-(100,100,0)-var5-var6 (1,-2,-3,4,-2,-5,2,-6),3,O0
line v[] idx[], $7f1f1f1f,
line (10,0,0)-(20,0,0)-(15,0,50) cicle,1,
line p[] points, ivalue, a[]+
line startpoint-endpoint,3,

Примечание:



Описание модулей

раздел <include> - описание вложений других моделей

<имя модуля без пробелов>
ИЛИ
"<имя модуля (можно с пробелами)>"[?<индекс модуля>] [, <вектор смещения> [, <вектор верчения h,v,f> [, <масштаб>]]]

Примечание:
<индекс модуля> - используется, если требуется включение модуля несколько раз. (указание индекса стало обязательным из-за внедрения системы программирования, предусматривающую объявление переменных)
вектор смещения - смещение моделей включаемого модуля относительно моделей родительского модуля
вектор верчений - углы поворота моделей включаемого модуля относительно моделей родительского модуля
вектор углов (x^y, y^z, z^x)
масштаб - коэффициент увеличения(уменьшения) всех моделей включаемого модуля относительно родительского модуля



Описание сцены

раздел <scene> - описание параметров сцены и отображения

описание камеры:
camera <вектор позиции>[-<вектор поворота камеры>[-<коэф.затухания>-<расстояние>]]
вектор поворота - вектор углов поворота камеры (x^y, y^z, z^x)
указывается коэф. затухания яркости на заданном расстоянии
Пример:'camera (0,-200,0)-(0,0,0)-0.25-300'

описание света:
light <вектор позиции>[-<коэф.затухания>-<расстояние>[-<цвет>]]
указывается коэф. затухания яркости на заданном расстоянии
цвет указывается также как для моделей
Пример: 'light (-50,10,50)-0.2-300-$7F7F7F'

описание трансформаци сцены:
scenerotate <вектор начального поворота>[-<вектор дельтаповорота>]
вектор начального поворота - поворот объекта для отображения камерой текущего модуля
вектор дельтаповорота - изменение углов поворота от кадра к кадру для камеры текущего модуля
Пример:'scenerotate (0,0,0)-(0,1,0)'

описание трансформаци света:
lightrotate <вектор начального поворота>[-<вектор дельтаповорота>]
вектор начального поворота - поворот света для отображения камерой текущего модуля
вектор дельтаповорота - изменение углов поворота света от кадра к кадру для камеры текущего модуля
Пример:'lightrotate (0,0,0)-(1,0,0)'

Примечание:
раздел scene можно разместить как в разделе инициализации - start (см. язык программирования), так и в покадровом коде.
Указанные параметры отображения сцены можно изменить во время обсчета в окне "Параметры".
Чтобы при формировании сцены учитывалось освещение и тень, эти опции следует специально включить на вкладке 'Кадры/СветоТень'.


Перейти на следующую страницу Перейти на предыдущую страницу
Сайт управляется системой uCoz