Конверт. мапав в другой формат.
- Автор темы Termi
- Дата создания
Плагин преобр. геометрию под DirectX, експортит геометрию, материалы и копирует текстуры (Diffuse, Specular, Bump, Normal). Также корекно работает с X-Ref объэктами (раньше чтобы достать X-Ref объэкт я перегружал сцены).
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
Плагин преобр. геометрию под DirectX, експортит геометрию, материалы и копирует текстуры (Diffuse, Specular, Bump, Normal). Также корекно работает с X-Ref объэктами (раньше чтобы достать X-Ref объэкт я перегружал сцены).
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
// Каждый учится на своих ошибках!!!
А вот как конвертить текстуры в .tga, .dds пока незнаю. Savin Denis, помоги пожалоста с конв. текстур!
- Рейтинг
- 138
Все точно также , если конвертируешь одновременно с выводом сцены то даже проще.
Из материала через 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
Из материала через 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
Как открыть и работать с диалогами аналог. из MaxScript:
-selectByName
-getSavePath
С помощью MAXApi конешно!
Если нужно обновить один или несколько обєктов (геометрию, материал, мапы) из сцены то будем обновлять только нужные объэкты а не сцену целяком из тисяч нодов (имеется в ввиду что некоторая сцена была заекспортена ранее)!
Ето я уже реализовал. Только нужен лист имен нодов!
-selectByName
-getSavePath
С помощью MAXApi конешно!
Если нужно обновить один или несколько обєктов (геометрию, материал, мапы) из сцены то будем обновлять только нужные объэкты а не сцену целяком из тисяч нодов (имеется в ввиду что некоторая сцена была заекспортена ранее)!
Ето я уже реализовал. Только нужен лист имен нодов!
- Рейтинг
- 138
Savin Denis...
Итак мапы!
Подключаем "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: Сцены для гамезы!
Итак мапы!
Подключаем "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: Сцены для гамезы!
- Рейтинг
- 138
Проветь что возврашают функции.
И в скрипте не просто так делалась копия битмапа - openBitMap каким-то образом лочила его от записи, возможно в коде тоже самое.
Да и в главе Creating, Opening, Writing and Closing Bitmaps советуют работать через менеджер
про ашники не знаю смотри как в примерах сделано
И в скрипте не просто так делалась копия битмапа - 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. ...),
// 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. ...),
- Рейтинг
- 138
Я похож на гадалку, кто проверять будет ? Где проверки возвратов функций ? Неужели так сложно скопироватиь в один в один из хелпа.
Вот эта билиберда здесь не нужна, размеры берутся из файла.
bi.SetWidth((WORD)bmih -> biWidth);
bi.SetHeight((WORD)bmih -> biHeight);
bi.SetCustomFlag(MAP_HAS_ALPHA);
И делаеш так:
Вот эта билиберда здесь не нужна, размеры берутся из файла.
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");