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

Импортер плагин на MAX SDK

Тема в разделе "MAXScript", создана пользователем Sergio10, 22 май 2007.

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

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Здраствуйте. Не могу создать и отобразить свет 'OMNI' ( Помогите плз. Вот есть метод:

    DoImport(const TCHAR *name, ImpInterface *ii, Interface *i, BOOL suppressPrompts) {
    GenLight *plight = ii->CreateLightObject(OMNI_LIGHT);
    plight->Enable(0);

    return IMPEXP_SUCCESS;
    }
    1 какой метод отвечает за задание координат света? (координаты находятся в файле который я импортирую)
    2 Как теперь отобразить его в сцене?

    Зарание спасибо.
     
  2. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Должно быть чтото вроде:

    Код:
    DoImport(const TCHAR *name, ImpInterface *impip, Interface *i, BOOL suppressPrompts) {
    
    ........
    
    // Init Value
    
    TSTR nodeName;
    Matrix3 nodeTM(1);
    GenLight* light = NULL;
    TimeValue time;
    
    // Create Class Light Omni
    
    light = impip->CreateLightObject(OMNI_LIGHT);
    
    // Set Light Settings
    nodeName = ... // Задать имя 
    nodeTM = ...     // Задать матрицу позиции
    
    
    time = (TimeValue)0; // Задать прараметры для кадра:
    
    Point3 col = ...  //  Задать цвет
    light->SetRGBColor(time, col);
    light->SetIntensity(time, 1.);  // Задать интенсивность
    
    light->SetHotspot(time, ...);
    light->SetFallsize(time, ...);
    
    light->SetUseAtten(1);
    light->SetAtten(time, ATTEN_START, ...);
    light->SetAtten(time, ATTEN_END, ...);
    
    // Set Shadow
    
    light->SetShadow(0);
    
    // Create Node
    ImpNode* node = impip->CreateNode();
    node->Reference(light);
    node->SetName(nodeName);
    impip->AddNodeToScene(node);
    
    INode* realINode = node->GetINode();
    RecordNode(realINode);
    
    // Set Transform & Enable
    node->SetTransform(0, nodeTM);
    light->Enable(TRUE);
    	
    return TRUE;
    
    PS
    Смотри как это делается в примерах например asciiimp.
     
  3. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    большое тебе спасибо. Но могли бы Вы поточнее написать что нужно? Потому что я не могу разобратся в примере который идёт в поставке с Max SDK.

    P.S. если можно то лучше покажите пример как создать примитивный объэкт (например 'plane')

    Буду весьма благодарен.
     
  4. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Если ты слабо ориентируешся в Max SDK, я бы посоветовал тебе для начала писать импортер на Max Script тут и примеров достаточно и я советом помогу.
     
  5. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Savin Denis, я уже написал экспортер на MAX SDK. У меня нет времени, чтобы писать еще на скрипте. Вот до чего я доучился уже.Помоги чем сможеш пожалуйста:
    int Importer::DoImport(const TCHAR *name, ImpInterface *ii, Interface *i, BOOL suppressPrompts) {


    ImpNode *node = ii->CreateNode();
    TriObject *tri = CreateNewTriObject();

    tri->mesh.setVert(1, 1.00, 0.00, 1.00); // должен создать только один вертекс
    node->Reference(tri);
    node->SetName(_T("Serg"));
    ii->AddNodeToScene(node);

    return IMPEXP_SUCCESS;
    }
    Проблема в том, что он ничего не создаёт и "Макс" тупо валится(((
    Зарание спасибо.
     
  6. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Вышло!!!!:)
    Теперь как мне обьеденить ети всето точки?? Потомоу что у меня только вершины импортируются.А я хочу чтобы они между собой были связаны сплайнами
     
  7. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Сплайнами ?
    Дальше индексируеш треугольники, по три вершины на face.
     
  8. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Savin Devis вот что у меня выйшло:

    ImpNode *node = ii->CreateNode();
    TriObject *tri = CreateNewTriObject();
    int numVert = 2;

    tri->mesh.setNumVerts(numVert);

    tri->mesh.setVert(1, 0.0, 1.0, 0.0);
    tri->mesh.setVert(2, 0.0, 0.0, 0.0);

    node->Reference(tri);
    node->SetName(_T("model"));
    ii->AddNodeToScene(node);
    Теперь у меня в сцене отображаются точки(вершины) в даном случае их только 2. Как мне теперь их соеденить линией?
    Как задать точки и соединить как face?
     
  9. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Делал вот так:
    Но так не выходит(( Падает 3ds Max ((
    Что я не так делаю?
     
  10. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    > Но так не выходит(( Падает 3ds Max ((
    Что я не так делаю?
    Ты задал размер массива faces в один фейс, а а сам фаршируеш целых 3 и к тому-же начинаеш с индекса 1 которорый уже выходит за границы массива.

    Для начала те нужны как миниму 3 вертекса, этого тебе достаточно чтобы создать Один face (треугольник), именно границы треугольника автоматически помечаються ребрами (edges)

    В фейсе ты должен указать Индексы на 3 точки в массиве точек, а не сами координаты !


     
  11. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Ага понятно. Вот как я сделал теперь:
    Всё равно не работает. Выправи пожалуйста меня если есть ошибка.
    Зарание спасибо.
     
  12. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Код:
    
    ImpNode *node = ii->CreateNode(); 
    TriObject *tri = CreateNewTriObject(); 
    Mesh *msh  = tri->GetMesh();
    
    int numVert = 3; 
    int numFace = 1; 
    
    msh->setNumVerts(numVert);
    msh->setNumFaces(numFace);
    
    
    
    msh->setVert(0, 0.0, 1.0, 0.0); 
    msh->setVert(1, 0.0, 0.0, 0.0); 
    msh->setVert(2, 1.0, 0.0, 0.0); 
    
    msh->faces[0].setVerts( 0, 1, 2);
    msh->faces[0].setEdgeVisFlags(1, 1, 1);
    
    msh->buildNormals();
    msh->buildBoundingBox();
    msh->InvalidateEdgeList();
    
    Matrix3 tm;
    tm.IdentityMatrix();
    node->Reference(tri); 
    node->SetTransform(0,tm);
    ii->AddNodeToScene(node);
    node->SetName(_T("JetRock model"));  
    ii->RedrawViews();
    
     
  13. Sergio10

    Sergio10 Пользователь сайта

    С нами с:
    06.05.2007
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Savin Denis болшое тебе спасибо. Можеш прокоментировать, что каждая строка делает...
     
  14. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Имей совесть, читай хелп
     
Модераторы: Savin Denis

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