Опрос

Что такое, по вашему мнению, «демократия»?













Сценарий objToWorld

15.01.2010 11:44 Администратор
Печать PDF
Рейтинг пользователей: / 0
ХудшийЛучший 
Индекс материала
Сценарий objToWorld
Страница 2

Приведенный ниже сценарий можно использовать для перевода точки из локального пространства формы в ее окончательное положение в мировом пространстве. proc float[] transformPoint( float $pt[], float $mtx[] ) { float $res[] = { 0.0, 0.0, 0.0 }; if( size($pt) 1 = 3 && size($mtx) != 16 ) { warning "transformPoint proc: pt must have three elements and matrix must have 16 elements"; //"процедура transformPoint: точка должна содержать три элемента, матрица должна содержать 16 элементов11; return $res; } $res[0] = *pt[0] * $mtx[0] + $pt[1] * $mtx[4] $pt[2] * $mtx[8] + $ntx[12]; $res[1] = $pt[0] * $mtx[1] + $pt[1] * $mtx[5] $pt[2] * $mtx[9] + $mtx[13]; $res[2] = $pt[0] * $mtx[2] + $pt[1] * $mtx[6] $pt[2] * $mtx[10] + $mtx[14]; return $res; proc float[] objToWorld( float $pt[], string $transformNode ) { float $mtx[16] = 'xform - query - worldSpace - matrix StransformNode'; float $res[] = transformPointt $pt, $mtx ); return $res; } К сожалению, язык MEL не содержит средств умножения матриц для работы с векторами и матрицами преобразования. В сочетании с проблемой выдачи последних как нераздельных массивов, это означает, что вы должны проделать эти операции самостоятельно. Процедура transformPoint предназначена для преобразования точки с участием матрицы преобразования. Точка ($pt) представлена как массив из 3 вещественных чисел.

Матрица ($mtx) дана как массив из 16 вещественных чисел. Процедура возвращает итоговое положение преобразованной точки как массив из 3 чисел вещественного типа, ргос fioatt] transformPointC. float $pt[], float $mtx[] ) { Важно отметить положенное в основу процедуры предположение о том, что определяемое матрицей преобразование является аффинным.

Аффинное преобразование состоит лишь из операций масштабирования, вращения и трансляции. Масштабирование может быть неравномерным. Коль скоро матрица преобразования является аффинной, ее последний столбец, по предположению, равен [О О О 1]. Описывается и инициализируется точка, которая станет результатом преобразования: float $res[] = { 0.0, 0.0, 0.0 }; Далее проверяется длина массивов $pt и $mtx. Если она не соответствует правильному значению., выдается предупреждение, и процедура возвращает результат.

i fС size($pt) (= 3 && size($mtx) != 16 ) { warning "transformPoint proc: pt must have three elements and matrix must have 16 elements"; return $res; } Затем путем умножения матриц точка подвергается преобразованию. Наконец, полученная в результате точка возвращается. $res[0] = $pt[0] * $mtx[0] + $pt[1] * $mtx[4] + $pt[2] * $mtx[8] + $mtx[12]; $res[1] - $pt[0] * $mtx[1] + $pt[1] * $mtx[5] + $pt[2] * $mtx[9] + $mtx[13]; $res[2] = $pt[0] * $mtx[2] + $pt[1] * $mtx[6] + $pt[2] * $iitx[10] + $mtx[14]; return $res; Процедура objToWorld принимает точку, заданную в локальном пространстве формы, и преобразует ее в мировое пространство.



Добавить комментарий


Защитный код
Обновить

Поиск

В закладку

 
 

Авторизация



Погода