Render.ru

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

Sergio10

Пользователь сайта
Рейтинг
2
#1
Здраствуйте. Не могу создать и отобразить свет '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 Как теперь отобразить его в сцене?

Зарание спасибо.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Должно быть чтото вроде:

Код:
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.
 

Sergio10

Пользователь сайта
Рейтинг
2
#3
большое тебе спасибо. Но могли бы Вы поточнее написать что нужно? Потому что я не могу разобратся в примере который идёт в поставке с Max SDK.

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

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Если ты слабо ориентируешся в Max SDK, я бы посоветовал тебе для начала писать импортер на Max Script тут и примеров достаточно и я советом помогу.
 

Sergio10

Пользователь сайта
Рейтинг
2
#5
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;
}
Проблема в том, что он ничего не создаёт и "Макс" тупо валится(((
Зарание спасибо.
 

Sergio10

Пользователь сайта
Рейтинг
2
#6
Вышло!!!!:)
Теперь как мне обьеденить ети всето точки?? Потомоу что у меня только вершины импортируются.А я хочу чтобы они между собой были связаны сплайнами
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Сплайнами ?
Дальше индексируеш треугольники, по три вершины на face.
 

Sergio10

Пользователь сайта
Рейтинг
2
#8
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?
 

Sergio10

Пользователь сайта
Рейтинг
2
#9
Делал вот так:
ImpNode *node = ii->CreateNode();
TriObject *tri = CreateNewTriObject();
int numFace = 1;

tri->mesh.setNumFaces(numFace);

tri->mesh.faces[1].v[0] = 0.0;
tri->mesh.faces[1].v[1] = 1.0;
tri->mesh.faces[1].v[2] = 0.0;

tri->mesh.faces[2].v[0] = 0.0;
tri->mesh.faces[2].v[1] = 0.0;
tri->mesh.faces[2].v[2] = 0.0;

tri->mesh.faces[3].v[0] = 1.0;
tri->mesh.faces[3].v[1] = 0.0;
tri->mesh.faces[3].v[2] = 0.0;

node->Reference(tri);
node->SetName(_T("model"));
ii->AddNodeToScene(node);
Но так не выходит(( Падает 3ds Max ((
Что я не так делаю?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#10
> Но так не выходит(( Падает 3ds Max ((
Что я не так делаю?
Ты задал размер массива faces в один фейс, а а сам фаршируеш целых 3 и к тому-же начинаеш с индекса 1 которорый уже выходит за границы массива.

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

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


 

Sergio10

Пользователь сайта
Рейтинг
2
#11
Ага понятно. Вот как я сделал теперь:
ImpNode *node = ii->CreateNode();
TriObject *tri = CreateNewTriObject();

tri->mesh.buildNormals();

int numVert = 3;
int numFace = 1;

tri->mesh.setNumVerts(numVert);
tri->mesh.setNumFaces(numFace);


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

tri->mesh.faces[0].v[0];
tri->mesh.faces[0].v[1];
tri->mesh.faces[0].v[2];

node->Reference(tri);
node->SetName(_T("JetRock model"));
ii->AddNodeToScene(node);
Всё равно не работает. Выправи пожалуйста меня если есть ошибка.
Зарание спасибо.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#12
Код:
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();
 

Sergio10

Пользователь сайта
Рейтинг
2
#13
Savin Denis болшое тебе спасибо. Можеш прокоментировать, что каждая строка делает...
 
Сверху