1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем -, 26 июл 2004.

Модераторы: Savin Denis
  1. Guest

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

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    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. Guest

    Я же писал, что это простое "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. Это в общем виде, конечно это можно сильно упростить.
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    С центром будет так:
    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. Guest

    Понятно. Нужно для собрания текстурных координат из нескольких каналов в один. Модель состоит из нескольких текстур в разных каналах, мне нужно было собрать все в одну текстуру.
     
Модераторы: Savin Denis

Поделиться этой страницей