Откройте актуальную версию документа прямо сейчас
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Приложение А
(справочное)
Руководство по внедрению схемы AMF XML
А.1 Элементы AMF
Перечень элементов AMF представлен в таблице А.1.
Таблица А.1 - Перечень элементов AMF
Элемент |
Родительский элемент (элементы) |
Атрибут |
Разрешено ли несколько элементов? |
Описание |
<nх>, |
<normal> |
|
Нет |
Нормализованные х-, у-или z-компоненты нормали к поверхности в вершине. |
<nу>, | ||||
<nz> | ||||
<volume> |
<mesh> |
|
Да |
Определяет объем от установленного списка вершин. |
|
|
materialid |
|
Идентификатор материала, применяемый к этому объему. |
<triangle> |
<volume> |
|
Да |
Определяет треугольник из трех вершин в 3D, в соответствии с правилом правой руки (против часовой стрелки). |
<v1>, |
<triangle> |
|
|
Индекс вершин, определяющих треугольник или грань. |
<v2>, |
<edge> |
|||
<v3> | ||||
<texture> |
|
|
Да |
Указывает данные текстуры, которая будет использоваться, с помощью tex-функции в формуле. Содержит последовательность Base64 с закодированными значениями и с указанием значения пикселей текстуры. |
|
|
id |
|
Назначает для новой текстуры уникальный ID. |
|
|
width |
|
Ширина (размер по горизонтали, х) текстуры в пикселях. |
|
|
height |
|
Высота (боковой размер, у) текстуры в пикселях. |
|
|
depth |
|
Глубина (вертикальный размер, z) текстуры в пикселях. |
|
|
|
|
Определяет, может ли текстура быть плиточной. Значение true означает "плиточная". Любое другое значение не подразумевает плитку. Любая текстура, отображенная за пределами заданного диапазона, должна возвращать к нулевому значению. |
|
|
type |
|
Кодирование данных в текстуре. В настоящее время должны быть "оттенки серого". В режиме градаций серого каждый пиксель представлен одним байтом в диапазоне [0-255]. Когда текстура задается с помощью tex-функции, эти значения преобразуются в одну точку в диапазоне [0-1] (см А.2). Полноцветное изображение, как правило, требует три текстуры - по одному для каждого из цветовых каналов. Графическое отображение прозрачности может потребовать наличия четвертого канала. |
<texmapl> |
<triangle> |
|
Нет |
Карта вершин этого треугольника (u, v, w) с координатами заданной текстуры. Если параметр не указан, координата w должна быть равна нулю. |
|
|
rtexid |
|
ID текстуры красного канала. |
|
|
gtexid |
|
ID текстуры зеленого канала. |
|
|
btexid |
|
ID текстуры голубого канала. |
|
|
atexid |
|
ID текстуры альфа-канала. |
<utext1>, |
<texmap> |
|
Нет |
Описание: координаты u, v и w (опционально) вершин треугольника 1, 2 и 3. |
<utex2>, | ||||
<utex3> | ||||
<ytext1>, | ||||
<ytex2>, | ||||
<ytex3> | ||||
<wtext1>, | ||||
<wtex2>, | ||||
<wtex3>, | ||||
<material> |
<amf> |
|
Да |
Доступный материал. |
|
|
id |
|
Уникальный ID материала. Значение "0" ID материала зарезервировано для обозначения пустот или расходуемого мат-ла. |
<composite> |
<material> |
|
Да |
Композитный материал. Значение числовой константы или математические функции координат х, у, z, определяющее соотношение материалов (materialid). Если значение отрицательное, оно считается равным нулю. Дробное значение числа должно быть округлено до 1. Если оно равно нулю, то материал отсутствует (пустота). Пустоты материалов не должны быть смешаны. См. в п. А.2 список допустимых математических функций. |
|
|
materialid |
|
Ссылка на существующий материал. Ссылка не должна быть рекурсивной или циклической. |
<constellation> |
<amf> |
|
Да |
Совокупность объектов с конкретным местоположением. |
|
|
id |
|
Определяет ID нового созвездия. |
<instance> |
<constellation> |
|
Да |
Совокупность объектов для печати. |
|
|
objectid |
|
Ссылка на ID существующего или создаваемого объекта или созвездия. Рекурсивные или циклические ссылки не должны использоваться. |
<deltax>, |
<instance> |
|
Нет |
Расстояние переноса в х-, у- или z-направлении, соответственно, в системе координат объекта для создания экземпляра объекта в текущем созвездии. |
<deltay>, | ||||
<deltaz> | ||||
<rx>, |
<instance> |
|
Нет |
Поворот объекта в градусах вокруг его х-, у- и z-осей, соответственно, для создания экземпляра объекта в текущем созвездии. Повороты должны быть выполнены в порядке х, а затем у и z. |
<ry>, | ||||
<rz> | ||||
<metadata> |
<amf>, |
|
Да |
Указывает дополнительную информацию об объекте. |
<object>, | ||||
<volume>, | ||||
<material>, | ||||
<vertex> | ||||
|
|
type |
|
Тип атрибута. Значения должны быть одним из следующих: name - буквенно-цифровая метка объекта, которая может быть использована интерпретатором при взаимодействии с пользователем; description - описание сущности; url - ссылка на внешний источник, относящийся к объекту; author - задает имя(имена) автора(ов); company - определяет компанию, генерирующий объект; producer - задает имя исходного программного обеспечения и версии; revision - определяет пересмотр сущности; tolerance - задает необходимый производственный допуск объекта в системе предприятия/подразделения; volume - определяет общий объем объекта в единице системы субъекта, который будет использоваться для проверки (применяется только к объекту и объему); elasticmodulus - задает модуль упругости объекта, в единицах СИ (только для материала); poissonratio - определяет коэффициент Пуассона материала, в единицах СИ (только для материала); colourprofile - цвет ICC пространства, используемый для интерпретации трех цветовых каналов <r>, <g> и <b>. Может быть один из 9sRGB9, 9AdobeRGB9, 9WIDE-Gamut-RGB9, 9CIERGB9, 9CIELAB9 или 9CIEXYZ9 (верхний уровень только <AML>) |
А.2 Математические операции и функции
Перечень математических операций и функций представлен в таблице А.2.
Формулы, содержащие символы, которые ограничены в XML, такие как "<" и ">", должны содержаться в пункте CDATA (т.е. начинаться с "[CDATA]" и заканчиваться "]]>").
Таблица А.2 - Перечень математических операций и функций
Старшинство |
Оператор |
Определение |
1 |
() |
Скобки блока |
2 |
^ |
Степень |
3 |
* |
Умножение |
3 |
/ |
Деление |
Логические операторы возвращают логическое значение 1 или 0, представляющий TRUE и FALSE, соответственно. Нулевое значение представляет FALSE и ненулевое значение представляет TRUE. | ||
4 |
+ |
Добавить |
4 |
- |
Вычитание |
5 |
= |
Равно |
5 |
<, <= |
Меньше, чем (или равно) |
5 |
>, >= |
Больше, чем (или равно) |
6 |
and |
Точка пересечения (логическое И) |
6 |
or |
Союз (логическое ИЛИ) |
6 |
xor |
Разница (исключающее ИЛИ) |
6 |
1 |
Отрицание (логическое НЕ) |
6 |
mod(a, b) |
Модуль, в том числе частичный. Возвращает остаток от деления а на b. |
6 |
sin(x) |
Синус, радианы |
6 |
cos(x) |
Косинусы, радианы |
6 |
tan(x) |
Тангенс, радианы |
6 |
asin(x) |
Арксинус, радианы |
6 |
acos(x) |
Арккосинус, радианы |
6 |
atan(x) |
Арктангенс, радианы |
6 |
floor(x) |
Округлить до ближайшего целого |
6 |
ceil(x) |
Округлить до ближайшего целого |
6 |
sqrt(x) |
Квадратный корень |
6 |
ln(x) |
Натуральный логарифм |
6 |
log10(x) |
Базовый десятичный логарифм |
6 |
exp(x) |
Экспонента |
6 |
abs(x) |
Абсолютное значение |
6 |
max(x, y) |
Максимальное значение |
6 |
min(x, y) |
Минимальное значение |
6 |
rand(x, y) |
2D или 3D координаты интервале [0, 1] (без учета 1). Возвращаемое число должно быть стойким (тот же номер должен всегда быть возвращен на те же координаты). См. пример реализации в пункте А.4. |
6 |
tex(textured, u, v, w) |
Возвращает скалярное значение с плавающей запятой в диапазоне [0, 1], что интерполирует текстуру с textureid в начало координат (u, v, w) для 3D-текстур и (u, v) для 2D-текстур. Если текстура имеет тип "градации серого", диапазон [0, 1] соответствует диапазону [0-255] в данных текстурах. Целые значения координат относятся к центру текстуры с первого пикселя, имеющего индекс 1. Если значения дробные, необходимо использовать метод линейной интерполяции. Если координаты выходят за пределы не плиточной текстуры, нулевое значение должно быть возвращено. Если текстура 2D и z координат задана, координата z должна быть проигнорирована. |
tex(textureid, u, v) | ||
Логические операторы возвращают логическое значение 1 или 0, представляющий FALSE и TRUE, соответственно. Нулевое значение представляет FALSE и ненулевое значение представляет TRUE. |
А.3 Формулы для перехода от криволинейных треугольников к прямолинейным
А.3.1 Нелинейные треугольные участки с установленными нормалями поверхности или краями касательных должны быть интерполированы из их трех вершин и шести касательных векторов и/или трех нормалей поверхности с использованием кривых интерполяции Эрмита второго порядка, как описано в пунктах А.3.2-А.3.4.
А.3.2 Для каждого из трех ребер треугольника (см. рисунок А.1 (а)) выполните шаги, описанные в пунктах А.3.2.1-А.3.2.6.
а) - обозначения, используемые для разбиения кривой;
б) - треугольники разделены рекурсивно в глубину до пяти
Рисунок А.1 - Типы треугольников, используемых в сетке
Примечание - На рисунке показан пример сферической поверхности, содержащей 320 треугольников, каждый разделен на 16 субтреугольников, используя процедуру, описанную в пункте А.3.
А.3.2.1 Если нормаль n0 в точке v0 не была установлена явно с помощью элемента <normal>, вычислить нормаль n0 можно путем вычисления декартова произведения между двумя краевыми касательными, сходящимися в этой точке. Для этого вычисления используют краевые касательные, указанные элементом <edge>, если таковые имеются, от А.3.2.6, выполненные в предшествующем уровне рекурсии или, если ни один из этих вариантов не доступен, используют прямые линии, соединяющие конечные точки.
А.3.2.2 Повторяют действия пункта А.3.2.1 для нормали ni в точке vi.
А.3.2.3 Если тангенс t0 не указан явно в элементе <edge> или предыдущей рекурсии, вычисляют касательный вектор t0 таким образом, чтобы он был перпендикулярен к нормали n0 и находился в плоскости, определяемой нормалью и вектором, соединяющим две вершины v0 и v1. Для расчета t0 используется формула (А.1), при этом d = v1 - v0:
(А.1)
А.3.2.4 Повторяют действия пункта А.3.2.1 для тангенса t1 в точке v1.
А.3.2.5 Центральную точку v01 = h(0,5) рассчитывают с помощью интерполяционной кривой Эрмита второго порядка, в соответствии с формулой (А.2):
.
(A.2)
А.3.2.6 Центральную касательную t01 = t(0,5) рассчитывают с помощью интерполяции кривой Эрмита второго порядка, в соответствии с формулой (А.3):
.
(A.3)
A.3.3 Используя полученные три новых вершины и нормали, делят треугольник на четыре подгруппы треугольников.
А.3.4 Повторяют рекурсивно действия пункта А.3.3 для каждого треугольника на глубину до пяти (см. рисунок А.1 (б)).
А.4 Код для псевдослучайной пространственной карты (PRSM)
Цель функции случайных значений (rand) - построить псевдослучайные текстуры, которые будут использоваться в построении объекта. Случайные (х, у), случайные (х, у, z) и случайные (х, у, z, k) возвращают постоянное случайное число в зависимости от установленной координаты. Эти функции позволяют получать 2D- или 3D-координаты в интервале [0, 1] (без учета 1). Возвращаемое число должно быть все время постоянным. Если k = 1, то второй номер может быть возвращен для этой координаты. Третий номер может быть возвращен для координаты с k = 2 и так далее. Пример реализации кода С ++ для rsm (х, y, z, k) приведен на рисунке А.2.
Рисунок A.2 - Пример реализации кода С ++ для PRSM-функции
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.