Render.ru

Как получить GetUVTransform()

#1
В MAXSdk у класса UVGen есть метод GetUVTransform который возвращает матрицу трансформации текстурных координат перед выводом на экран( она делает ее из значений coordinates в Material Editor - Tiling Offset Angle и тд)
В скрипте у UVGen есть только получение компонентов - U_Tiling U_Offset и тд, как из этих компонентов сделать матрицу трансформации? Если кто думает что просто надо просто сделать scale Tiling translate Offset и rotate Angle то это не так. Как получить Offset + Tiling я методом тыка нашел, а как еще добавить Angle?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
m = meditMaterials[7] --(Bitmap)
UVtm = (transMatrix [m.coords.U_Offset, m.coords.V_Offset,0]) * \
(scaleMatrix [m.coords.U_Tiling, m.coords.V_Tiling, 1]) * \
((eulerAngles m.coords.U_Angle m.coords.V_Angle m.coords.W_Angle) as Matrix3)
 
#3
Я же писал, что это простое "translate scale rotate" дает не правильный результат. Вот пример:
U_Offset = 0.25; V_Offset = 0; U_Tiling = 2.0; V_Tiling = 1.0; Вот какую матрицу дает MAXSdk GetUVTransform : (2 0 0),(0 1 0),(0 0 1),(-1 0 0). А у тебя получается (matrix3 [2,0,0] [0,1,0] [0,0,1] [0.5,0,0]).
Scale и Rotation происходят онтосительно центра текстуры (0.5;0.5). Если mCenter это матрица смещения в центр а mCenterInv - ее обратная матрица то считать надо так:UVTm = CenterInv*mTransform*mRotation*mScale*mCenter где
mTransform = transfMatrix -1*[U_Offset,V_Offset,0], ну mScale и mRotation соотсветственно, только без -1. Это в общем виде, конечно это можно сильно упростить.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
С центром будет так:
m = meditMaterials[2]
offs = transMatrix (-[m.coords.U_Offset, m.coords.V_Offset,0])
scales = scaleMatrix ([m.coords.U_Tiling, m.coords.V_Tiling, 1])
Angs = (eulerAngles m.coords.U_Angle m.coords.V_Angle (m.coords.W_Angle)) as Matrix3
ctrTM = transMatrix [-.5, -.5, 0]
mTM = (xFormMat ( offs * Angs * scales ) (ctrTM))
Только зачем если не секрет это тебе нужно ?
 
#5
Понятно. Нужно для собрания текстурных координат из нескольких каналов в один. Модель состоит из нескольких текстур в разных каналах, мне нужно было собрать все в одну текстуру.
 
Сверху