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


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


Загрузка из ресурсов

Самый простой способ избежать всех проблем, связанных с местонахождением файлов, — внести объекты и их текстуры в число ресурсов приложения. В качестве примера я включил корпус танка и две текстуры, используемые в нем, в состав ресурсов приложения Color. В меню Edit присутствует команда Tank Hull (resource), реализованная следующим образом:

void CMainFrame::OnEditTank()

{

C3dShape* pShape = new C3dShape;

BOOL b = pShape-»Load(IDX_TANK) ;

ASSERT(b) ;

ASSERT(m_pScene) ;

m_pScene-»AddChild (pShape) ;

m_pScene-»m_ShapeList .Append (pShape) ;

MakeCurrent(pShape) ;

Все, что нам понадобилось, — идентификатор ресурса нашего объекта-танка. Но как происходит загрузка текстур? И как же включить в приложение те ресурсы, которые нам нужны?

Приведенная ниже функция устроена почти так же, как и функция загрузки из файлов. Отличие лишь в том, что загружаемые компоненты берутся из ресурса, а не из файла. Функция для загрузки объекта из ресурса выглядит следующим образом:

// Загрузить фигуру из XOF-pecypca BOOL C3dShape::Load(UINT uiResid) {

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

New () ;

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

D3DRMLOADRESOURCE info;

info.hModule = AfxGetResourceHandle() ;

info.lpName = MAKEINTRESOURCE(uiResid);

info.lpType = "XOF";

m_hr = m_pIMeshBld-»Load (sinfo,

NULL,

D3DRMLOAD_FROMRESOURCE,

C3dLoadTextureResCallback,

this) ;

ASSERT;SUCCEEDED(m_hr)) ;

if (FAILED(m_hr)) ( return FALSE;

}

AttachVisual(m_pIMeshBld) ;

m strName = "Resource object";

return TRUE;

Обратите внимание — здесь также используется функция косвенного вызова для загрузки текстур. Только на этот раз текстуры являются ресурсами приложения и загрузка их должна осуществляться по-другому:

static HRESULT CSdLoadTextureResCallback(char* pszName, void* pArg,

LPDIRECT3DRMTEXTURE* ppITex)

{

C3dShape* pThis = (C3dShape*) pArg;

ASSERT(pThis) ;

ASSERT (pThis-»IsKindOf (RUNTIME_CLASS (C3dShape) ) ) ;

ASSERT(pszName) ;




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



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