forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Subset'ы (http://forum.boolean.name/showthread.php?t=7624)

-=Jack=- 12.01.2009 23:49

Subset'ы
 
Я пишу поддержку файлов формата 3ds для своего движка. Возникла проблема с текстурированием. При загрузке из файла Х меш разбивается на субсеты, каждому из которых соответствует текстура. Вот проблема в том, что я не знаю, как разбить созданный программно меш на субсеты.

Заранее спасибо! ;)

mr.DIMAS 13.01.2009 18:10

Re: Subset'ы
 
тебе че надо: рендерить нужный сабсэт нужной тексой?

-=Jack=- 13.01.2009 18:17

Ответ: Subset'ы
 
Нет, мне нужно разбить меш на сабсеты. Но я вроде разобрался, что для этого нужно юзать SetAttributeTable, сейчас проверяю, работает ли...

-=Jack=- 14.01.2009 21:33

Ответ: Subset'ы
 
Не работает :( Если я загружаю меш из X, то Mesh.GetAttributeTable возвращяет нулевой массив :( mr.DIMAS, ты же вроде тоже двиг пишешь, что ты ещё загрузку мешей из других форматов не делал?

mr.DIMAS 14.01.2009 22:17

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
};
примерно так.
зы. может быть очень завернул - ногами не бить

-=Jack=- 15.01.2009 00:02

Ответ: Subset'ы
 
мм... не то. Я загружаю всю инфу из файла(координаты, тексы и принадлежность к сабсетам). Меня вот что интересует. Как разделить сам меш на субсеты и этим субсетам присвоить определённые треугольники, так, чтобы я мог вызвать Mesh.DrawSubset для этого. При загрузке файлов X это происходит автоматически, а вот как это сделать программно?

Насчёт Mesh.GetAttributeTable:
Для того, чтобы нормально обращятся к этой функции, нужно сначала оптимизировать меш. И вроде как через Mesh.SetAttributeTable можно назначить каждому атрибуту(как я понял, это и есть сабсэты) ночальный треугольник и их количество и начальную вершину и их количество. Только я вот не пойму: мне что нужно будет вызывать оптимизацию при любом изменении вершинного/индексного буфера?


Часовой пояс GMT +4, время: 04:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot