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


Интерфейсы и классы - часть 16


C3dlmage* pimg = new C3dlmage;

if ( !pImg-»Load() ) {

delete pimg;

return;

}

ASSERT(m_pScene) ;

m pScene-»m_ImgList .Append (pimg) ;

m_pScene~»SetBackground (pimg) ;

Функция C3dlmage::Load вызвана без аргументов, поэтому на экране появляется окно диалога. Здесь пользователь может выбрать растровый (bitmap) файл Windows, который будет служить фоновым изображением. Кроме того, загружаемый растр можно выбрать и другим способом — передавая функции Load имя файла или идентификатор растрового ресурса. В приведенном ниже примере мы загружаем растровый ресурс и затем используем его для создания текстуры:

// Загрузить изображение земного шара C3dlmage* pimgl = new C3dlmage;

if ( !pImgl-»Load(IDB_WORLD) ) {

78 Щу Глава 3. Интерфейсы и классы

AfxMessageBox("Failed to load worldl.bmp");

delete pimgl;

return;

} m_pScene-»m_ImgList. Append (pimgl) ;

// Создать текстуру по изображению C3dTexture texl;

texl.Create(pimgl);

C3dTexture

Класс C3dTexture (определяемый в 3dlmage.cpp) является оболочкой интерфейса IDirect3DRMTexture. Как видно из приведенного выше примера, текстуры создаются на основе графических изображений. Размеры сторон у таких изображений должны быть равны степеням двойки. Так, параметры 32х64, 128х128 и 4х8 подходят для создания текстур; а величины 32х45 и 11х16 являются недопустимыми. Если изображение имеет неправильный размер, функция C3dTexture::Create завершится неудачей:

BOOL C3dTexture::Create() {

if (m_pITexture) (

m_pITexture-»Release () ;

m_pITexture = NULL;

}

// Убедиться, что размеры изображения равны степеням 2 for (int i = 0; (1 «« i) « GetWidth(); i++);

for (int j = 0; (1 «« j) « GetHeight(); j++);

if (GetWidthf) != (1 «« i) ¦¦ GetHeightO != (1 «« j)) ( TRACE("This image can't be used as a texture."\ " Its sides are not exact powers of 2\n");

}

if (!the3dEngine.CreateTexture(GetObject(), &m_pITexture)) {

TRACE("Texture create failed\n");

m pITexture = NULL;

return FALSE;

}

ASSERT(m_pITexture) ;




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



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