Пример использования:
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/5847792P.S. : Подскажите как у вас тут прикрепить архив, пишет что нельзя.... А то на этом хостинге только 30 дней хранится...