Несколько изменив функцию RotateLineC), можно получить на экране изображение катящегося колеса со спицами. Текст файла для этого случая приведен в листинге 3.8.
Листинг 3.8
#include <windows.h> #include <math.h>
void RotateWheeKHDC hdc. int Erase) {
static double Alfa - 0; double dAlfa - 5.0/360.0*6.283; RECT r;
GetCli entRect(Wi ndowFromDC(hdc).&r);
static int xC - r.right/2; Оператор выполнится только при первом вызове, int уС - г.bottom/2, int 1 - г.bottom/6; xC-xOr. right? 0: (xC+dAl fa*l): AIfa+»dAlfa;
// Модель движения колеса.
if (Erase) Rectangle(hdc.0.0.r.right.r.bottom);
//Очистка фона.
for(int i - 0:i<ll:i++) //Цикл рисования спиц колеса. {
doublе tAlfа-А1fa+i*16.0/360.0*6.283;
MoveToEx(hdc.xC-1*cos(tAIfа).yC-1*s i n(tAl fа).NULL);
Li neTo(hdc.xC+1*cos(tAlfа).уC+l*s i n(tAlfа));
}
}
Какие изменения есть в этой функции? Кроме увеличения при каждом запуске угла поворота колеса (AI f а+ * dAl fa), центр вращения перемещается вдоль оси X. Шаг перемещения выбран таким образом, чтобы моделировать движение колеса без проскальзывания относительно грунта. Для игр, тренажеров и других систем динамической графики наличие развитой системы моделирования поведения отоВывод динамических изображений бражаемого объекта является типичной ситуацией. В отличие от нашего примера, модель может быть довольно сложной и реализоваться отдельным файлом или даже библиотекой.
Запустив весь проект на выполнение (он находится в папке RotateWheel), можно увидеть, как при распахивании окна на весь экран «моргает» изображение колеса. Глаз замечает процесс стирания и перерисовки изображения. Для сложных изображений из большого количества деталей это особенно заметно. Достаточно отключить аппаратное ускорение графических функций, запустить программу из папки SingleBuffer - и можно будет воочию наблюдать процесс обновления экрана при формировании трехмерного изображения средствами библиотеки OpenGL.
Для повышения качества динамических изображений недостаточно повышения частоты, с которой обновляются изображения (частоты смены кадров). Предположим, что программа формирует последовательность картинок, состоящих из большого количества объектов. Для имитации движения объектов кадры обновляются 100 раз в секунду, а время формирования нового кадра составляет 10 мс. Это значит, что последний из многоугольников картинки начнет рисоваться через 9 мс после стирания экрана, а еще через миллисекунду произойдет смена кадра и процесс повторится. В результате высокой частоты повторения кадров на экране будет виден итог усреднения цвета фона и многоугольников. Цвет первого из нарисованных объектов будет передаваться без искажений, а последний объект будет виден в течение 10 % времени кадра, и на экране его изображение будет почти сливаться с фоном.