Шаг 3 - Покрасим фон

Сказано, сделано, точнее сейчас мы это сделаем :).

На данный момент мы все инициализировали. О нет, мы забыли инициализировать еще кучу параметров (шутка) :). Да, мы действительно упустили, но только одну часть - прорисовку сцены, точнее откуда она должна вызываться и дальше мы ее заполним. Итак, приступаем к делу, создаем функцию RenderScene () и вызываем ее из функции WinMain входящий в цикл while, но после условия if (если):

else
	if(bActive) { RenderScene (); };

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

BOOL bActive = true;

Его мы инициализируем после всех #include. А также создаем сообщение (см. функцию отвечающая за сообщения Windows: "Шаг 1 - Инициализация оконного приложения"), чтобы Windows мог сам сообразить, когда это нужно, а не нам гадать:

case WM_ACTIVATE:
	bActive = LOWORD(wParam);
	break;

Вроде бы все, ничего не забыли. Беремся за функцию RenderScene() и начинаем!!! Располагаем ее перед WinMain и пишем:

//--------------------------
// Name: RenderScreen ()
// Desc: Прорисовка сцены
//--------------------------
void RenderScene (void)
{
	static int color=0;
	p_d3d_Device->Clear (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB (color++, 0, 0), 0.0f, 0);
	p_d3d_Device->BeginScene ();
	p_d3d_Device->EndScene ();
	p_d3d_Device->Present (NULL, NULL, NULL, NULL);
};

Мы могли объявить переменную color глобальной, но в данном случае можно использовать static (постоянная).

Функция Clear очищает экран, но в нашем случае закрашивает цветом начиная от черного и заканчивая красным (к цвету все время прибавляем единицу, чтобы он менялся). Первый 0 указывает количество Rects, но так как этот указатель мы (пока) не используем то присваиваем ему 0, соответственно второй параметр pRects тоже нужно назначить NULL. Третий параметр D3DCLEAR_TARGET говорит, что будем очищать буфер неким цветом указанный в четвертом параметре. D3DCOLOR_XRGB (color++, 0, 0) имеет структуру D3DCOLOR_XRGB (R - Red (красный), G - Green (Зеленый), B - Blue (Синий)), т.е. 0 - это черный цвет, а 255 - это насыщенный цвет (ярко красный). 1.0f говорит, что расстояние к зрителю самое дальнее, 0.0 самое близкое. В нашем случае это пока не влияет, т.к. нет у нас третьей оси, ось глубины (Z), но мы вернемся к ней позже. И последнее значение, которые мы не рассмотрели это 0, это тоже параметр глубины и пока он нам не нужен.

Функции BeginScene и EndScene указывают на начало и конца визуализации сцены, т.е. здесь мы можем подготовить сцену в буфере, прежде чем ее показывать. И осталась функция Present, здесь Вы уже сами догадались :) да, да, да :) это та самая функция, которая все готовенькое отображает Вам, перевертывает буфера по порядку (это если их несколько) :)

Компилируем, запускаем, должно получиться что-то вроде этого:

3_1.gif (5124 b)

Один из вариантов мультипликации. Ого, да мы с Вами переборщили, не рановато ли? ;)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 03.08.2002 (обновлено 10.08.2002)