![]() |
Subset'ы
Я пишу поддержку файлов формата 3ds для своего движка. Возникла проблема с текстурированием. При загрузке из файла Х меш разбивается на субсеты, каждому из которых соответствует текстура. Вот проблема в том, что я не знаю, как разбить созданный программно меш на субсеты.
Заранее спасибо! ;) |
Re: Subset'ы
тебе че надо: рендерить нужный сабсэт нужной тексой?
|
Ответ: Subset'ы
Нет, мне нужно разбить меш на сабсеты. Но я вроде разобрался, что для этого нужно юзать SetAttributeTable, сейчас проверяю, работает ли...
|
Ответ: Subset'ы
Не работает :( Если я загружаю меш из X, то Mesh.GetAttributeTable возвращяет нулевой массив :( mr.DIMAS, ты же вроде тоже двиг пишешь, что ты ещё загрузку мешей из других форматов не делал?
|
Re: Subset'ы
пока еще не добрался, но уже на днях собираюсь написать. слух раз надо разбить на сабсэты то сделай по такому алгоритму
struct vertex { D3DXVECTOR3 p; // позиция вершины D3DXVECTOR3 n; //нормаль D3DXVECTOR2 t; //координаты тексы unsigned long subsetN; //номер принадлежности к определенному сабсэту }; struct _3dsmesh { vertex data[65536]; LPDIRECT3DTEXTURE9 pTexture[7]; }; воть и далее мочим загрузку из 3ds'a и забиваем структуру данными из файла(надеюсь ты знаешь как это сделать). а subsetN устанавливаем в соответствии с определенными объектом. например _3dsmesh mesh; ... загрузка меша(координаты вершин, нормалей и текстурных координат) ... thisObject = первый_меш_в_файле и т.д. if(thisObj == "Рука") { D3DXCreateTextureFromFile(pd3dd,путь_к_текстуре_ру ки_указанный_в_3ds'e,mesh.pTexture[0]); mesh.subsetN = 0 }; примерно так. зы. может быть очень завернул - ногами не бить |
Ответ: Subset'ы
мм... не то. Я загружаю всю инфу из файла(координаты, тексы и принадлежность к сабсетам). Меня вот что интересует. Как разделить сам меш на субсеты и этим субсетам присвоить определённые треугольники, так, чтобы я мог вызвать Mesh.DrawSubset для этого. При загрузке файлов X это происходит автоматически, а вот как это сделать программно?
Насчёт Mesh.GetAttributeTable: Для того, чтобы нормально обращятся к этой функции, нужно сначала оптимизировать меш. И вроде как через Mesh.SetAttributeTable можно назначить каждому атрибуту(как я понял, это и есть сабсэты) ночальный треугольник и их количество и начальную вершину и их количество. Только я вот не пойму: мне что нужно будет вызывать оптимизацию при любом изменении вершинного/индексного буфера? |
Часовой пояс GMT +4, время: 04:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot