Сказано, сделано, точнее сейчас мы это сделаем :).
На данный момент мы все инициализировали. О нет, мы забыли инициализировать еще кучу параметров (шутка) :). Да, мы действительно упустили, но только одну часть - прорисовку сцены, точнее откуда она должна вызываться и дальше мы ее заполним. Итак, приступаем к делу, создаем функцию 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, здесь Вы уже сами догадались :) да, да, да :) это та самая функция, которая все готовенькое отображает Вам, перевертывает буфера по порядку (это если их несколько) :)
Компилируем, запускаем, должно получиться что-то вроде этого:
Один из вариантов мультипликации. Ого, да мы с Вами переборщили, не рановато ли? ;)