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




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


BOOL C3dSprite::SetPhase(int iPhase) f

return m_Tex.SetPhase(iPhase);

Работа этой функции сводится к вызову C3dlmage::SetPhase:

/b> Я? Глава 9. Спрайты

BOOL C3dlmage::SetPhase(int iPhase)

{

if ((iPhase « 0) ¦I (iPhase »= m_iPhases)) f return FALSE;

} m iCurPhase = iPhase;

// Скопировать графические данные нужной фазы в рабочую

область

int iBytes = m_rlimg.bytes_per_line * m_rlimg.height;

memcpy(m rlimg.bufferi,

(BYTE*)m_rlimg.bufferl + (m_iCurPhase + 1) *

iBytes,

iBytes) ;

// Известить производные классы об изменениях _OnImageChanged() ;

return TRUE;

}

Приведенный выше фрагмент реализует операцию копирования, изображенную на Рисунок 9-7. Мы вычисляем адрес нужного кадра, затем функцией memcpy копируем данные кадра в рабочую область. После завершения копирования вызывается функция _OnlmageChanged. Эта виртуальная функция класса C3dlmage не делает ничего, однако она может быть переопределена в производных классах (таких, как C3dTexture), которым необходимо сообщать о внесении изменении в изображение. Класс C3dTexture с помощью этой функции, расположенной в файле 3dlmage.cpp, уведомляет механизм визуализации об изменении графических данных текстуры:

// виртуальная функция

void C3dTexture::_OnImageChanged()

{

if (!m pITexture) return; // Возможно, текстура еще не

создана

// Новое изображение — известить механизм визуализации // об изменении графических данных (но не палитры!) m hr = m pITexture-»Changed(TRUE, FALSE);

ASSERT(SUCCEEDED(m_hr)) ;

}

При этом крайне важно уведомить механизм визуализации об изменении графических данных, поскольку они могут кэшироваться; простое обновление графических данных еще не гарантирует изменения макета на экране.

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

Приложение Sprites

Когда я пишу приложение-пример, то стараюсь избегать всего, что не является абсолютно необходимым для раскрытия темы. Стоило мне наладить работу класса C3dSprite в приложении Sprites, как тут же немедленно захотелось добавить в него массу новых возможностей. Тем не менее я устоял перед искушением, и результат моих усилий можно в первом приближении назвать игрой.




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