Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > lib3ds текстурирование


Автор: revaldo666 6.8.2012, 14:36
Всем привет, использую библиотеку lib3ds для загрузки .3ds модели, могу наложить на неё текстуру или изменить цвет....однако, модель состоит из 4-х мешей, а при наложении или текстура или цвет налаживается на всю модель, хотелось бы узнать как реализовать наложение текстуры в определённое место (так же чтобы тестура на модели была выбранного размера) и цвет налаживался на определённую часть модели.
загрузка модели:
Код

 model=LIB3DS::lib3ds_file_open(WndThread::directory+"compose.3DS");
for(int i=0;i<model->meshes->Count;i++)
        mesh.Add(model->meshes[i]);
    for(int i=0;i<model->materials->Count;i++)
        material.Add(model->materials[i]);

наложение цветовой текстуры
Код

int r;
             Random ^ rnd=gcnew Random();
             r=rnd->Next();
             image1=gcnew Bitmap(5,5);
             colorDialog1->ShowDialog();
             for(int i=0;i<5;i++)
             {
                 for(int k=0;k<5;k++)
                 {
                     image1->SetPixel(k,i,colorDialog1->Color);
                 }
             }
             image1->Save(System::IO::Path::GetDirectoryName(System::Reflection::Assembly::GetEntryAssembly()->Location)+"\\colors\\"
                            +Convert::ToString(r)+".jpg",ImageFormat::Jpeg);
             Lib3dsMesh ^tmpmesh=gcnew Lib3dsMesh();
             tmpmodel=gcnew Lib3dsFile();
             mat=gcnew Lib3dsMaterial();
             mat=LIB3DS::lib3ds_material_new("C_Color");
             mat->texture1_map->name=System::IO::Path::GetDirectoryName(System::Reflection::Assembly::GetEntryAssembly()->Location)+"\\colors\\"
                 +Convert::ToString(r)+".jpg";
             int ind=0;
             for(int i=0;i<files_in_dir.Count;i++)
             {
                 model=LIB3DS::lib3ds_file_open(Convert::ToString(files_in_dir[i]));
                 for(int k=0;k<model->meshes->Count;k++)
                 {
                     tmpmesh=model->meshes[k];
                     LIB3DS::lib3ds_file_insert_material(tmpmodel,mat,0);
                     LIB3DS::lib3ds_file_insert_mesh(tmpmodel,tmpmesh,ind);
                     ind++;
                 }
             }
             model=tmpmodel;
             modelrefresher();

Если нужна информация по классам библиотеки, скажите я скину.

Автор: borisbn 7.8.2012, 09:31
revaldo666, ты как минимум дважды ошибся разделом. Всякая работа с мультимедией, графикой и т.п. - http://forum.vingrad.ru/forum/c-c++multimedia-OpenGL-DirectX.html
а судя по
Цитата(revaldo666 @  6.8.2012,  14:36 Найти цитируемый пост)
 Random ^ rnd=gcnew Random();

тебе вообще не в раздел Си++, а в раздел по .Net (ссылки на с++/CLR не нашёл)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)