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

3dsmax 4.2 sdk question

Тема в разделе "Общие вопросы", создана пользователем -, 14 фев 2002.

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

    добрый день всем,
    кто-нибудь знает форум разработчиков плагинов для макса? есть вопрос, не знаю, уместно ли его здесь задавать. можно отвечать по почте

    артем.
     
  2. Nathaly

    Nathaly Мастер

    С нами с:
    09.03.2001
    Сообщения:
    250
    Симпатии:
    0
    Баллы:
    97
    Гвори..Если нестрашно:))
     
  3. Guest

    в максе построены два разных объекта и оториентированы каким-то образом друг относительно друга. в методе callback() при перечислении узлов ( nodes ) я делаю

    ObjectState os = node->EvalWorldState( iptr->GetTime( ), FALSE );
    TriObject* t = (TriObject*) os.obj;
    Mesh* mesh = &t->mesh;

    и двльше получаю координаты вершин и связку треугольников. в help сказано, что это позволит получить координаты объектов после прохождения всей pipeline, такими, какими они выглядят на экране. вот с этим и проблема. ряд объектов оказывается неправильно отмасштабированным, ряд - оказываются не в том месте. матрицы преобразований у каждого узла единичные.

    где хранится смещение объекта, его масштаб и как узнать, относительно какого объекта он смещен?

    заранее благодарен. артем.
     
  4. Guest

    Артем

    по поводу object trasnform смотри SDK help->The Node and Object Offset Transformations
    по pipeline: попробуй search on EvalWorldState в ..\maxsdk\samples - наверняка найдешь то цтхо ишцешь


    hope it helps
     
  5. Guest

    Да, это именно оно. Я так и подозревал. Уже сделал. Меня смутили две вещи из SDK hekp

    1)Prototype:

    virtual const ObjectState& EvalWorldState(TimeValue time,BOOL evalHidden=TRUE)=0;

    Remarks:

    This method should be called when a developer needs to work with an object that is the result of the node's pipeline. This is the object that the appears in the scene.

    Но это оказалось неправдой ;-))

    2) A developer can retrieve the entire transformation of the object-offset, node and parent using the INode method:

    virtual Matrix3 GetObjectTM(TimeValue time, Interval* valid=NULL)=0;

    This is the entire transformation of a node. When an object is actually translated into world space, this is the matrix used. This is the Object Offset Transformation, plus the NodeTM, plus the world space modifier effect.

    Логично предположить, что вызова

    Matrix3 tm = node->GetObjectTM( iptr->GetTime( ) );
    Point3 tp = VectorTransform( tm, mesh->verts );

    хватит для получения уже окончательных координат. Ан нет, приходится делать

    Point3 off = tm.GetRow( 3 );
    myobj->vlist.set( tp.x+off.x, tp.y+off.y, tp.z+off.z, ocount );

    что очень странно. Почему трансляцию нельзя сделать в VectorTransform(), ведь вся информация имеется?

    Спасибо в любом случае.
     
Модераторы: Артер

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