ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


Цвет и текстуры - часть 22


Как же справиться с этой проблемой? Существуют по крайней мере три решения:

• Модифицировать функцию открытия файла, чтобы перед загрузкой объекта она изменяла текущий каталог на тот, в котором находится файл объекта.

• Включить файлы объекта и текстуры в ресурсы приложения и загружать их оттуда.

• Разработать свой собственный файловый формат, в котором данные объекта и текстуры хранятся в одном файле.

Давайте посмотрим, как работает функция C3dShape::Load. Ниже приведен ее полный исходный текст:

const char* C3dShape::Load(const char* pszFileName) {

static CString strFile;

if (!pszFileName ¦¦ !strlen(pszFileName)) { // Вывести окно диалога File Open

/b> ЭД!!5' Глава 8. Цвет и текстуры

CFileDialog dig(TRUE,

NULL,

NULL,

OFN_HIDEREADONLY,

_3DOBJ_LOADFILTER,

NULL) ;

if (dlg.DoModal() != IDOK) return NULL;

// Получить путь к файлу strFile = dlg.m_ofn.IpstrFile;

} else (

strFiie = pszFileName;

)

// Удалить любые существующие визуальные элементы New () ;

// Попытаться загрузить файл ASSERT(m_pIMeshBld) ;

m_hr = m_pIMeshBld-»Load( (void*) (const char*) strFile,

NULL,

D3DRMLOAD_FROMFILE ¦ D3DRMLOAD_FIRST,

C3dLoadTextureCallback,

this);

if (FAILED(m_hr)) { return NULL;

)

AttachVisual(m_pIMeshBld) ;

m strName = "File object: ";

m_strName += pszFileName;

return strFile;

В начале функции Load определяется имя файла. Если имя файла не было передано при вызове функции, оно запрашивается у пользователя в окне диалога File Open. Затем мы удаляем из объекта-фигуры все существующие визуальные элементы и вызываем функцию интерфейса построения сеток для загрузки объекта из заданного файла на диске. Четвертый параметр, C3dLoadTextureCallback, содержит указатель на функцию, которая загружает текстурное изображение. Пятый параметр представляет собой произвольную величину, которая задается пользователем и передается функции, загружающей текстуру. Мы передаем в нем this, указатель на объект CSdShape, поскольку функция загрузки текстуры является статической и не принадлежит классу C3dShape.




Начало  Назад  Вперед



Книжный магазин