Russian Qt Forum
Май 09, 2024, 23:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузчик .3ds (3ds max ) файлов в виде DLL  (Прочитано 10015 раз)
lolbla2
Гость
« : Март 10, 2012, 18:35 »

Пример использования:

1) Подключаем нужные заголовочные файлы к проекту, а именно loader.h, loader_global.h
2) В файле .pro прописываем путь к DLL, LIBS += "путь к dll"

3) В программе нужно создать объект структуры t3DModel, то есть саму модель, в которой хранится информация о вершинах, полигонах, материалах и т.д.

Пример кода:
Код
C++ (Qt)
#include "widget.h"
#include "ui_widget.h"
 
 
t3DModel g_World;
Loader loader;
Widget::Widget(QWidget *parent, QGLWidget *shareWidget) :
   QGLWidget(parent,shareWidget),
   ui(new Ui::Widget)
{
   ui->setupUi(this);
   // загрузка файла
   loader.Import3DS(&g_World,"D:\\Park.3ds");
   qDebug()<<g_World.pMaterials.size()<<endl;
   qDebug()<<g_World.pObject.size();
}
 
Widget::~Widget()
{
   delete ui;
}
 
void Widget::initializeGL()
{
   glEnable(GL_DEPTH_TEST);          //включить Z buffer
   glEnable(GL_TEXTURE_2D);          //включить текстуры
   glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
}
void Widget::resizeGL(int w, int h)
{
   if (h==0)
     {
        h=1;
     }
           // установка области видимости
    glViewport(0,0,w,h);
           //установка матрицы проекции для того чтобы производить операции над матрицами
    glMatrixMode(GL_PROJECTION);
           //установка единичной матрицы
    glLoadIdentity();
           //установка перспективы
    gluPerspective(45.0f,(float)w/(float)h, 1, 500.0f);
           //установка матрицы в режим отображения модели
    glMatrixMode(GL_MODELVIEW);
}
 
void Widget::paintGL()
{
           glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //очищаем буффер цвета и z буфер
           glLoadIdentity();
           gluLookAt(0, 3.5f, 30, 0, 0, 0, 0, 1, 0);    //устанавливаем позицию камеры
 
           //отрисовка
           //цикл по всем объектам
           for(int i = 0; i < g_World.numOfObjects; i++)
           {
                   if(g_World.pObject.size() <= 0) break;
 
                   t3DObject *pObject = &g_World.pObject[i];
 
                   //если у объекта есть текстура, то надо её связать, то есть применить
                   if(pObject->bHasTexture)
                   {
 
                           glEnable(GL_TEXTURE_2D);
 
                           glColor3ub(255, 255, 255);
 
                           glBindTexture(GL_TEXTURE_2D, g_Texture[pObject->materialID]);
                   }
                   else
                   {
 
                           glDisable(GL_TEXTURE_2D);
 
                           glColor3ub(255, 255, 255);
                   }
                   //начало отрисовки в режиме закрашенных треугольников
                   glBegin(GL_TRIANGLES);
 
                   for(int j = 0; j < pObject->numOfFaces; j++) //цикл по полигонам
                   {
                           for(int whichVertex = 0; whichVertex < 3; whichVertex++) //цикл по вершинам полигона
                           {
                                   int index = pObject->pFaces[j].vertIndex[whichVertex];
                                   //установка нормали
                                   glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z);
                                   //если есть текстура надо установить текстурные координаты
                                   if(pObject->bHasTexture)
                                   {
 
                                           if(pObject->pTexVerts)
                                           {
                                                   glTexCoord2f(pObject->pTexVerts[ index ].x, pObject->pTexVerts[ index ].y);
                                           }
                                   }
                                           //устанавливаем цвет объекта
                                   if(g_World.pMaterials.size() && pObject->materialID >= 0)
                                   {
                                           BYTE *pColor = g_World.pMaterials[pObject->materialID].color;
 
                                           glColor3ub(pColor[0], pColor[1], pColor[2]);
                                   }
                                   //рисуем вершину
                                   glVertex3f(pObject->pVerts[ index ].x, pObject->pVerts[ index ].y, pObject->pVerts[ index ].z);
                           }
                   }
                   glEnd();
           }
}
 

исходник: http://rapid.ufanet.ru/5847792

P.S. : Подскажите как у вас тут прикрепить архив, пишет что нельзя.... А то на этом хостинге только 30 дней хранится...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Март 10, 2012, 19:21 »

P.S. : Подскажите как у вас тут прикрепить архив, пишет что нельзя.... А то на этом хостинге только 30 дней хранится...
а не проще на каком-нить гитхабе разместить?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lolbla2
Гость
« Ответ #2 : Март 10, 2012, 19:38 »

P.S. : Подскажите как у вас тут прикрепить архив, пишет что нельзя.... А то на этом хостинге только 30 дней хранится...
а не проще на каком-нить гитхабе разместить?

ни разу не пользовался, лень разбираться как он работает((
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 10, 2012, 19:53 »

Интересное кино. Сами написали?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #4 : Март 11, 2012, 01:15 »

P.S. : Подскажите как у вас тут прикрепить архив, пишет что нельзя.... А то на этом хостинге только 30 дней хранится...
а не проще на каком-нить гитхабе разместить?

ни разу не пользовался, лень разбираться как он работает((
хоть какую-нибудь систему контроля версий желательно постигнуть
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
IGreench
Гость
« Ответ #5 : Октябрь 26, 2012, 07:36 »

Автор либы еще бывает тут?
Может ли кто поделиться данной лялькой? Прям нужная сильно вещь  Улыбающийся
А вообще, рад что таким делятся! Спасибо таким людям  Подмигивающий
Записан
lolbla2
Гость
« Ответ #6 : Март 04, 2013, 12:27 »

Автор либы еще бывает тут?
Может ли кто поделиться данной лялькой? Прям нужная сильно вещь  Улыбающийся
А вообще, рад что таким делятся! Спасибо таким людям  Подмигивающий

Бывает тут, но редко)) Вам нужна либа?
Записан
IGreench
Гость
« Ответ #7 : Март 04, 2013, 12:43 »

Нужна =)
Записан
quiet_readonly
Гость
« Ответ #8 : Март 07, 2013, 23:08 »

Нужна =)
Не уверен, что необходимость столь же острая, как в октябре, но посоветую модуль Qt3D либо библиотеку assimp (на которую, собственно, и опирается Qt3D). Также могу выложить на гитхаб самописную библиотечку + проверочную программу, там реализованы загрузка с помощью assimp и простенький рендеринг (без шейдеров).
Записан
IGreench
Гость
« Ответ #9 : Март 08, 2013, 07:48 »

Было бы очень здорово!
Записан
quiet_readonly
Гость
« Ответ #10 : Март 09, 2013, 23:04 »

Было бы очень здорово!
https://github.com/sergey-shambir/toAlexeyMalov
Загрузка моделей - в библиотечке union.
Записан
IGreench
Гость
« Ответ #11 : Март 09, 2013, 23:07 »

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.171 секунд. Запросов: 22.