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



         

Спрайты - часть 8


ASSERT(uiIDBitmap) ;

// Создать фрейм и включить его в список фигур макета C3dFrame::Create(pScene) ;

pScene-»m_ShapeList .Append (this) ;

// Установить фрейм в заданное положение SetPosition(x, у, z);

/b> Д¦^ Глава 9. Спрайты

// Загрузить растровое изображение для создания текстуры if ( !m_Tex.C3dIniage: :Load (uiIDBitmap) ) {

TRACE("Failed to load texture image\n");

return FALSE;

}

// Задать количество фаз m_Tex.C3d!mage::SetNumPhases(iPhases) ;

// Создать текстуру по растровому изображению m_Tex.Create ();

// Задать свойства IDirect3DRMTexture* pITex = m_Tex.Getlnterface ();

ASSERT(pITex) ;

// Разрешить глубинное масштабирование m_hr = pITex-»SetDecalScale (TRUE) ;

ASSERT(SUCCEEDED(m_hr)) ;

// Задать исходный размер double a = (double)m_Tex.GetWidth() / (double)m_Tex.GetHeight();

m__hr = pITex-»SetDecalSize (scale * a, scale);

ASSERT(SUCCEEDED(m_hr)) ;

// Разрешить прозрачность m hr = pITex-»SetDecalTransparency(TRUE);

ASSERT(SUCCEEDED(m_hr)) ;

// Назначить прозрачным цветом черный m hr = pITex-»SetDecalTransparentColor(RGB_MAKE(0, 0, 0)) ;

ASSERT(SUCCEEDED(m_hr)) ;

// Перенести начало координат фрейма // в середину нижней стороны m_hr = pITex-»SetDecalOrigin (m_Tex. GetWidth () /2, m_Tex.GetHeight 0-1) ;

ASSERT(SUCCEEDED(m_hr)) ;

// Присоединить текстуру в качестве визуального элемента return AddVisual(&m_Tex) ;

}

Прежде всего необходимо создать объект C3dFrame (базового класса C3dSprite). Мы включаем спрайт в макет и задаем начальное положение фрейма в макете. Далее загружается растровое изображение для текстуры из ресурса BITMAP, добавленного с помощью AppStudio. Обратите внимание на то, что мы вызываем

Создание оастоовых изобоажении ^Sil 227

функцию C3dlmage::Load базового класса, а не функцию класса C3dTexture. Это сделано для того, чтобы иметь возможность слегка изменить изображение перед тем, как создавать по нему текстуру.

После того как изображение загружено, для него задается количество кадров (iPhases). Кадр, используемый в качестве рабочей области, не считается. После того как изображение будет разделено на кадры, мы создаем текстуру. Возможно, код получился некрасивым, но зато он достаточно эффективен и позволяет создавать многофазные спрайты, практически не обращаясь к коду классов текстуры и растрового изображения.




Содержание  Назад  Вперед