Плагин преобр. геометрию под DirectX, експортит геометрию, материалы и копирует текстуры (Diffuse, Specular, Bump, Normal). Также корекно работает с X-Ref объэктами (раньше чтобы достать X-Ref объэкт я перегружал сцены).
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
Плагин преобр. геометрию под DirectX, експортит геометрию, материалы и копирует текстуры (Diffuse, Specular, Bump, Normal). Также корекно работает с X-Ref объэктами (раньше чтобы достать X-Ref объэкт я перегружал сцены).
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
Все точно также , если конвертируешь одновременно с выводом сцены то даже проще.
Из материала через BitmapTex получаешь уже готовый битмат,
Остается только его записать с другим типом.
Для этого создаешь новый BitmapInfo куда с помощью SetName() прописываешь
новое имя и другое расширение.
Открываешь битмап на запись:
bmap->OpenOutput(&bi); //Здесь похоже считываются пользовательские настройки для каждого типа файлов.
После чего просто записываешь битмап (Write) и закрываешь его
PS
Правда могут возникнуть сдложности с явным указанием формата для DDS файла так как в в SDK нет кода или .h
для классса BitmapIO. По сути будут применены последние пользовательские настройки. Хотя наверно можно обойти если подсунуть конфигурационный файл с нужными настройками My Doc..\User\Local Settings\Application Data\Autodesk\3dsmax\2009 - 32bit\enu\plugcfg\dxdds.cfg
Savin DenisЕсли не секрет что такой за проект с XRef файлами ? Для движка вроде черечур
Сцена в максе практически полностью состоит с XRef объэктов! Поетому при експорте нодов приходится обрабатывать XRef материалы (доставать нужную инфу из листа материалов).
Как открыть и работать с диалогами аналог. из MaxScript:
-selectByName
-getSavePath
С помощью MAXApi конешно!
Если нужно обновить один или несколько обєктов (геометрию, материал, мапы) из сцены то будем обновлять только нужные объэкты а не сцену целяком из тисяч нодов (имеется в ввиду что некоторая сцена была заекспортена ранее)!
Ето я уже реализовал. Только нужен лист имен нодов!
getSavePath - SelectFileOutput, смотри главу "Creating, Opening, Writing and Closing Bitmaps"
На счет -selectByName посмотри исходники editablepoly там по кнопке Attach List должен вызывать такое окно или копать SceneExplorer.
PS Что из XRef это я и так догадался, просто интересно что за сцены ?
Savin Denis...
Итак мапы!
Подключаем "bmmlib.h".
Когда подключяю "bitmap.h" получаю 202 левых errors (раньше, в коде, нигде не подключал)!?
Все текстуры которые заюзаны в "My" сцене хрянятся в vector<string> TGSMaps см. листинг:
for (vector<string>::iterator i = TGSMaps.begin(); i != TGSMaps.end(); i++) {
Покрайней мере нет ошибок.
Но!!!!!! Результата я не вижу. Мапав в фолдере нет. Что я деляю не так?
С путями к мапам все отлично. bmih - тоже загр. без багов. Значит дело в bi, bm!
Проветь что возврашают функции.
И в скрипте не просто так делалась копия битмапа - openBitMap каким-то образом лочила его от записи, возможно в коде тоже самое.
Да и в главе Creating, Opening, Writing and Closing Bitmaps советуют работать через менеджер
про ашники не знаю смотри как в примерах сделано
...
// Set Info Bitmap
BitmapInfo bi;
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
bi.SetName((*i).c_str());
// Convert Bitmap
Bitmap *bm;
bm = TheManager -> Load(&bi);
bi.SetName(c);
bm -> OpenOutput(&bi);
bm -> Write(&bi, BMM_SINGLEFRAME);
bm -> Close(&bi, BMM_CLOSE_COMPLETE);
...
1) Результат есть, Но заекпортеные мапы, что .bmp что .tga получаются одинакового размера, Очень подозрительно происходит ли вообще конвертация мапав или просто меняэтся разширение,
2) Конвертятся только мапы из ,jpg и .bmp, На остальных макс вилетает в неизвестность (.tga, .tif. ...),
Я похож на гадалку, кто проверять будет ? Где проверки возвратов функций ? Неужели так сложно скопироватиь в один в один из хелпа.
Вот эта билиберда здесь не нужна, размеры берутся из файла.
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Termi
Savin Denis
Termi
gc()
Savin Denis
Тут можно использовать комманду gc light:true
Termi
Как конвертить мапы с помощью MaxAPI?
Savin Denis
Termi
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
Termi
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
Savin Denis
Из материала через BitmapTex получаешь уже готовый битмат,
Остается только его записать с другим типом.
Для этого создаешь новый BitmapInfo куда с помощью SetName() прописываешь
новое имя и другое расширение.
Открываешь битмап на запись:
bmap->OpenOutput(&bi); //Здесь похоже считываются пользовательские настройки для каждого типа файлов.
После чего просто записываешь битмап (Write) и закрываешь его
PS
Правда могут возникнуть сдложности с явным указанием формата для DDS файла так как в в SDK нет кода или .h
для классса BitmapIO. По сути будут применены последние пользовательские настройки. Хотя наверно можно обойти если подсунуть конфигурационный файл с нужными настройками My Doc..\User\Local Settings\Application Data\Autodesk\3dsmax\2009 - 32bit\enu\plugcfg\dxdds.cfg
Savin Denis
Savin Denis
Termi
Termi
-selectByName
-getSavePath
С помощью MAXApi конешно!
Если нужно обновить один или несколько обєктов (геометрию, материал, мапы) из сцены то будем обновлять только нужные объэкты а не сцену целяком из тисяч нодов (имеется в ввиду что некоторая сцена была заекспортена ранее)!
Ето я уже реализовал. Только нужен лист имен нодов!
Savin Denis
На счет -selectByName посмотри исходники editablepoly там по кнопке Attach List должен вызывать такое окно или копать SceneExplorer.
PS Что из XRef это я и так догадался, просто интересно что за сцены ?
Termi
Итак мапы!
Подключаем "bmmlib.h".
Когда подключяю "bitmap.h" получаю 202 левых errors (раньше, в коде, нигде не подключал)!?
Все текстуры которые заюзаны в "My" сцене хрянятся в vector<string> TGSMaps см. листинг:
for (vector<string>::iterator i = TGSMaps.begin(); i != TGSMaps.end(); i++) {
vector<string> v = FilterString((*i), "\\"😉;
char c[256];
v[v.size()-1].resize(v[v.size()-1].size()-4);
sprintf(c, "%s%stga", Folder.c_str(), v[v.size()-1].c_str());
Msg((*i).c_str()); //message имя текстури
Msg(c); //message новое имя текстуры
// Open Bitmap
char MapName[256];
sprintf(MapName, "%s", (*i).c_str());
BITMAPINFOHEADER *bmih = LoadBitmapFromFile(MapName);
// Set Info Bitmap
BitmapInfo bi((*i).c_str());
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
bi.SetName(c);
// Convert Bitmap
Bitmap *bm = (Bitmap* )bmih;
bm -> OpenOutput(&bi);
bm -> Write(&bi, BMM_SINGLEFRAME);
bm -> Close(&bi, BMM_CLOSE_COMPLETE);
}
Покрайней мере нет ошибок.
Но!!!!!! Результата я не вижу. Мапав в фолдере нет. Что я деляю не так?
С путями к мапам все отлично. bmih - тоже загр. без багов. Значит дело в bi, bm!
PS: Сцены для гамезы!
Savin Denis
И в скрипте не просто так делалась копия битмапа - openBitMap каким-то образом лочила его от записи, возможно в коде тоже самое.
Да и в главе Creating, Opening, Writing and Closing Bitmaps советуют работать через менеджер
про ашники не знаю смотри как в примерах сделано
Termi
// Set Info Bitmap
BitmapInfo bi;
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
bi.SetName((*i).c_str());
// Convert Bitmap
Bitmap *bm;
bm = TheManager -> Load(&bi);
bi.SetName(c);
bm -> OpenOutput(&bi);
bm -> Write(&bi, BMM_SINGLEFRAME);
bm -> Close(&bi, BMM_CLOSE_COMPLETE);
...
1) Результат есть, Но заекпортеные мапы, что .bmp что .tga получаются одинакового размера, Очень подозрительно происходит ли вообще конвертация мапав или просто меняэтся разширение,
2) Конвертятся только мапы из ,jpg и .bmp, На остальных макс вилетает в неизвестность (.tga, .tif. ...),
Savin Denis
Вот эта билиберда здесь не нужна, размеры берутся из файла.
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
И делаеш так:
BitmapInfo obi, cbi; Bitmap *omap, *cmap; BMMRES status; obi.SetName((*i).c_str()); omap = TheManager->Load(&obi, &status); if(status != BMMRES_SUCCESS) { MessageBox(ip->GetMAXHWnd(), _T("Error loading bitmap."), _T("Error"), MB_ICONSTOP); } cbi = obi; cbi.SetName(c); cbi.SetType(BMM_TRUE_32); cmap = TheManager->Create(&cbi); if ( cmap == NULL ) { MessageBox(ip->GetMAXHWnd(), _T("Error Create bitmap."), _T("Error"), MB_ICONSTOP); } cmap->CopyImage(omap, COPY_IMAGE_RESIZE_HI_QUALITY, 0); if ( cmap->OpenOutput(&cbi) != BMMRES_SUCCESS ) { MessageBox(ip->GetMAXHWnd(), _T("Error OpenOutput(&cbi) bitmap."), _T("Error"), MB_ICONSTOP); } if ( cmap->Write(&cbi) != BMMRES_SUCCESS ) { MessageBox(ip->GetMAXHWnd(), _T("Error Write bitmap."), _T("Error"), MB_ICONSTOP); } cmap->Close(&cbi); cmap->Display("The copied Bitmap");Termi
Savin Denis