Войти
ПрограммированиеФорумГрафика

Создание Export плагина для 3D Studio MAX. (Комментарии к статье) (5 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#60
23:27, 11 июня 2007

Граждане! Может кто подскажет почему в тексте плагина число вершин и число нормалей пишется одинаковое? Ведь вершина может иметь несколько нормалей... Код нужно дорабатывать на случай если есть вершины без сглаживающих групп?


#61
12:22, 10 окт. 2007

Неправильно экспортируются текстурные координаты.
Чтоб добиться коректного отображения я делаю след:
1. Создал куб
2. применил UVW Map и выбрал там Plane-наложение.
3. Применяю Unwrap UVW
и только теперь импортируется правильно. Но проблема в том, что как только я разрываю вершины в Unwrap Editor'e (Detach Face Verts), чтоб правильно наложить текстуру, экспортируется уже не так как надо. Так же как и при применении Unwrap без шага 2.
Может у меня проблема с импортером? Я гружу в OpenGL ES

Слева - Что делаю в максе, справа- результат экспорта-импорта.
Box | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)
Box_Mod | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)
Box_Mod_ED | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)
Box_Mod_ED_Det | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)
Box_Mod_ED_Det_ed | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)
Box_Mod_ED_Det_ed_sq | Создание Export плагина для 3D Studio MAX. (Комментарии к статье)

#62
13:43, 15 ноя. 2007

я тоже столкнулся с такой проблеммой. немного поразмыслив мозгами, я понял в чём дело.
дело в  том что вывод у нас идёт индексированый. следовательно на 1 точку один TV. отсюда идёт вывод что может прально отоброжаться только обвёрточная текстура на 1 объекте. другя текстура будет отоброжаться правильно лишь в том случае, если позиция UV совподает с позицией UV другого треугольника имеющие смежные точки.

#63
1:24, 17 ноя. 2007

да автор конечно молоца что в чужом коде поменял коменты на русские и попытался разобраться в коде :)))

короч тоже столкнулся с проблемой текстурных координат и вроде как решил.. и нах переписал этот корявый плагин под свои корявые требования :))
вобщем смотрим как в прикрепленном к статье файле используются геометрические данные

    for (i = 0; i < gModel.Model[n].MeshFaces.size(); i++)
      for (j = 0; j < 3; j++)
      {
        if (gModel.Model[n].MeshTVerts.size() != 0) 
          glTexCoord2fv(&gModel.Model[n].MeshTVerts[gModel.Model[n].MeshFaces[i].VertIndex[j+3]].vert[0]);
        glNormal3fv(&gModel.Model[n].MeshVerts[gModel.Model[n].MeshFaces[i].VertIndex[j]].normal[0]);
        glVertex3fv(&gModel.Model[n].MeshVerts[gModel.Model[n].MeshFaces[i].VertIndex[j]].vert[0]);
      }

короче тупо повертексно все делается.. никакого смысла запихивать индексы в файл ваще не вижу.. размера все равно больше получается...

короче дабы искоренить зло придумал фишку... из имеющихся текстурных координат, вертексов, индексов и текстурных индексов сделать 2 массива.. индексов и вертексов:

struct stVertex
{
  float x,y,z;
  float tu, tv;
};
struct stFace
{
  int v[3];
};
void Convert(Tab<stVertex>& verts, Tab<stFace>& faces, TriObject * TObj)
{
  stFace tmpFace;
  stVertex tmpVert;
  Mesh mesh = TObj->GetMesh();

  BitArray vMatch;
  vMatch.SetSize(mesh.numVerts);
  vMatch.ClearAll();

 verts.SetCount(mesh.numVerts);
 faces.SetCount(mesh.numFaces);

  for (int i = 0; i < mesh.numFaces; i++)
  {
    Face face = mesh.faces[i];
    TVFace tvFace = mesh.tvFace[i];

    for (int j = 0; j < 3; j++)
    {
      tmpFace.v[j] = face.v[j];
    }

    for (int j = 0; j < 3; j++)
    {
      UVVert tVert = mesh.tVerts[tvFace.t[j]];
      Point3 vert  = mesh.verts[face.v[j]];
      tmpVert.x = vert.x;
      tmpVert.y = vert.y;
      tmpVert.z = vert.z;
      tmpVert.tu = tVert.x;
      tmpVert.tv = tVert.y;

      bool equal = false;
      if((verts[face.v[j]].tu == tmpVert.tu) && (verts[face.v[j]].tv == tmpVert.tv))
        equal = true;

      if (vMatch[face.v[j]])
      {
        if (!equal)
        {
          tmpFace.v[j] = verts.Count();
          verts.Insert(verts.Count(), 1, &tmpVert);
        }
      }
      else
      {
        verts[face.v[j]] = tmpVert;
        vMatch.Set(face.v[j]);
      }
    }
    faces[i] = tmpFace;
  }
}

довольно  грязновато) но удобно.. по крайней мере мне :)))

enjoy

#64
21:36, 2 янв. 2008

  Возникла странная проблема. Хочу чтоб при экспорте сначала появлялось диалаговое окно для указания некоторых настроек
экспорта. Для этого в функции DoExport, перед самим процессом экспорта, вызываю функуию DialogBox со ссылкой на нужное окно и т.п.
Вроде все правильно, да и компилится без ошибок. Но если при этом попытаться сделать экспорт в максе то вылезает такая вот муть:
http://tech3d.4sure.info/db.jpg
В окне этом ничего не работает, даже кнопка Cancel. Выйти можно только нажав в верхнем правом углу, после чего
экспорт не происходит(т.е. дальше DialogBox код уже не выполняется). И никакой ошибки не выводит.

Причем если не вызывать функцию DialogBox то все экспортится без проблем и того странного окна не вылезает.
Так же для теста пробовал вызывать MessageBox - тоже без проблем, MessageBox отображается и далее экспорт.

Кто-нить сталкивался? В чем подвох?
Может в параметрах функции DialogBox? В качестве hInstance указывал GetModuleHandle(NULL), и просто NULL.
Еще грешу на suppressPrompts, передаваемый в DoExport, смысла которого я так и не догнал. Да и что толку,
нельзя же его менять, это всего лишь передаваемый извне параметр в функцию DoExport. Что мне с ним делать.

Спасибо.

#65
23:02, 2 янв. 2008

В DllEntry.cpp обьявлен
HINSTANCE hInstance;

У себя сделай
extern HINSTANCE hInstance;
и используй его.

  // show dialog
  showPrompts = suppressPrompts ? FALSE : TRUE;
  if (showPrompts) 
  {
    if (!DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_PANEL), iface->GetMAXHWnd(), UExporterOptionsDlgProc, (LPARAM)this))
    {
      return 1;
    }
  }
#66
0:04, 3 янв. 2008

CoolDev,  спасибо! Все дело было в HINSTANCE.
Че то я ступил:)

#67
11:03, 24 мар. 2008

Здравствуйте. При изучении этой статьи и написании своего плагина столкнулся с проблемой экспорта нормалей.
Нормали я экспортировал не так как описано в этой статье, а через Mesh.countNormal (это количество нормалей) и Mesh.gfxNormal (это сами нормали). Судя по тому, какой результат получен, я на верном пути. А загвоздка у меня вот в чём: я не знаю где хранятся данные о том к какому фейсу привязана каждая из нормалей. В хелпе к sdk не нашёл описания даже к этим переменным. Писал изучая mesh.h.

#68
13:58, 13 июня 2008

KKH не знаю что такое gfxNormal, я делал через rendervertex (rv), но алгоритм сопоставления нормалей и фейсов думаю одинаковый.
У rv можно получть нормаль из rn (одна нормаль, не сглаженая), либо считать из массива ern. Алгоритм следующий:
Нужно завести переменную (пусть будет Ncount) в которой хранится число уже считанных нормалей для данной вершины. В цикле прохода по фейсам нужно анализировать группу сглаживания фейса и взависимости от рез-а может быть три случа:
1) Если вершина с таким индеком в массиве вершин макса и такой группой сглаживания встретилась впервые - нужно брать нормаль из массива ern нормаль с индексом [Ncount], и увеличивать Ncount на один.
2) Если вершина с таким индексом и такой группой сглаживания уже встречалась, то надо брать нормаль у нее.
3) Если группа сглаживания вершине не назначена. то нужно брать нормаль не из массива ern, а из rn (нужно брать из rn, тк ern будет пустым в случае отсутствия груп сглаживания у вершины).
Я кстати тоже почему-то не смог найти в сдк, где это было б описано.

#69
18:08, 13 июля 2008

Столкнулся с такой проблемой, как экспортировать шейдеры из 3dsmax?

Вот я накладываю на объект матрериал класса DirectX 9 Shader, указываю путь к шейдеру. Вопрос как экспортнуть сцену в ASE что-бы он макс мне экспортнул путь к шейдеру? Или что нужно изменить в исходнике плагина? может кто знает? т.к по умолчанию он мне путь к шейдеру не экспортирует, ни название шейдера, ничего.

Рылся в MAX SDK, но ничего путного там не нашел

#70
14:43, 17 сен. 2008

А где собственно можна слить SDK? (k 2009 MAXy)!

Прошло более 9 месяцев
#71
13:57, 8 июля 2009

Как переделать код для 8 мах-а?

#72
14:36, 8 июля 2009

КЕН
Очевидно, пытаться компилировать под SDK 8 Макса. Смотреть ошибки и исправлять их. :)

Прошло более 8 месяцев
#73
23:32, 16 мар. 2010

у меня VS 2008,max SDK 2009,создал простой экспортер чтобы разобраться как оно работает,все компилится,но добавляю мой плагин в папку stdplugs,в максе 2008/2009 выдает ошибку:
DLL <c:\program files\...>
failed to initialize
Error code 193-%1 не является приложением Win32

http://slil.ru/28807125 - вот плагин и исходники к нему

#74
23:48, 18 мар. 2010

эй,ну может кто-нибудь помочь?компилил исходники к этой статье,та же самая ошибка!создавл проект с помощью plugin wizard,но в результате выдает все туже ошибку(((((

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.