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



         

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


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

Изображения для составного спрайта


ПРИМЕЧАНИЕ

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

Должен сказать, что это занятие оказалось на редкость нудным. Мой низкий поклон тем, кто подобным образом зарабатывает себе на хлеб. Нам остается лишь написать программу.

Класс C3dSprite

Давайте посмотрим, как устроен класс для работы с фреймом и изображениями, из которых состоит спрайт, и как им пользоваться в приложении. Одна часть

/b>

Создание растровых изображений

кода находится в классе C3dlmage, а другая — в классе C3dSprite. Класс C3dlmage содержит функции для загрузки растрового изображения и деления его на кадры. Для работы с текстурами, необходимыми для создания анимационного спрайта, класс C3dSprite пользуется услугами класса C3dTexture, производного от C3dlmage. На самом деле здесь нет ничего сложного, поэтому давайте рассмотрим процесс создания спрайта и на ходу заполним возможные пробелы. Класс C3dSprite определяется в 3dPlus.h следующим образом:

class C3dSprite : public C3dFrame

{

public:

DECLARE_DYNAMIC(C3dSprite) ;

C3dSprite() ;

virtual --C3dSprite () ;

BOOL Create(C3dScene* pScene,

double x, double y, double z, double scale, UINT uiIDBitmap, int iPhases = 1);

BOOL SetPhase(int iPhase) ;

int GetNumPhases() {return m_Tex.GetNumPhases (); } int GetPhasef) {return m_Tex.Get Phase();}

protected:

C3dTexture m_Tex;

};

Обратите внимание — класс C3dSprite является производным от C3dFrame, и его членом является объект C3dTexture. Мы подробно рассмотрим две функции, Create и SetPhase, поскольку именно они выполняют основную работу объекта-спрайта. Функция Create спроектирована так, чтобы включение спрайта в макет происходило как можно проще. Давайте подробно рассмотрим ее, шаг за шагом.

BOOL C3dSprite::Create(C3dScene* pScene,

double x, double у, double z, double scale, UINT uiIDBitmap, int iPhases) (

ASSERT(pScene) ;

ASSERT(iPhases » 0);




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