Программа реализующая цветное движущееся изображение: фейерверк
Министерство общего и профессионального
образования Российской Федерации
Южно-Уральский государственный университет
Кафедра ЭВМ
Пояснительная записка к курсовому проекту
по курсу "Компьютерная графика"
_______________ Ярош Е.С.
"___" ______________2001г
Автор работы:
студент группы ПС-357
____________Муратов И.И.
"___" _____________ 2010г
Челябинск
2010
- Задание
- Анализ задания
- Руководство программиста
- Критические участки
- Особенности исполнения
- Текст программы
- Руководство пользователя
4.1 Системные требования.
5. Литература
1. Задание
Разработать программу, реализующую цветное движущееся изображение: фейерверк. В двух вариантах: для DOS и Win9x.
2. Анализ задания
Графический вывод в программе для Win9x был реализован через DirectDraw, т.к. данный метод позволяет добиться наиболее рационального использования ресурсов, а так же осуществляет поддержку аппаратной реализации большинства из предоставляемых функций.
- Особенности исполнения.
Для Win9x:
Программа при запуске устанавливает разрешение 800x600x16, создаёт экранный (первичный) и внеэкранный (вторичный) буфера (primary и back buffers), располагая их в видеопамяти. Все спрайты так же загружаются в видеопамять. Построение изображения путём копирования спрайтов во вторичный буфер, и генерация ландшафта в нём же. Затем функцией Flip() происходит обмен указателей на первичный и вторичный буфера синхронно с обратным ходом луча.
Для DOS:
При запуске устанавливается разрешение 640x350x8, работа ведётся с двумя видеостраницами, переключение происходит при обратном ходе луча.
3.2 Критические участки
При отсутствии сообщений вызываются две основных функции:
– MoveFrame();
– ShowFrame();
MoveFrame() – в этой функции происходит расчёт всех необходимых параметров.
ShowFrame() производит генерацию изображения и вывод его на экран.
- Текст программы
Т.к. текст программы занимает значительный объём, то имеет смысл привести только наиболее значимые участки:
Для Win9x:
Основной цикл WinMain:
...
while( msg.message != WM_QUIT )
{
if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else if(g_bReady)
{
if(timeGetTime()-oldTime > g_time)
{
oldTime=timeGetTime();
MoveFrame();
ShowFrame(1);
}
}
}
...
Функция для расчёта взрывов:
VOID MoveSnow(SNOW *Snow)
{
Snow->x+=cos(Snow->tau)*Snow->speed;
Snow->y+=sin(Snow->tau)*Snow->speed;
Snow->y+=Snow->r/80;
Snow->r=sqrt((Snow->x-Snow->u)*(Snow->x-Snow->u)+(Snow->y-Snow->v)*(Snow->y-Snow->v));
Snow->t++;
Snow->type++;
if (Snow->type>Snow->change) {Snow->color=(int)(RandDouble*6); Snow->type=0;}
if (Snow->t>Snow->live)
{
Snow->death=true;//ChangeSnow(Snow);
CurN--;
}
}
Функция вывода на экран:
HRESULT ShowFrame(int k)
{
if( lpPrimary == NULL) return E_FAIL;
// Очистка буфера
DDBLTFX ddbltfx;
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = 0x0000ff;
lpBack->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx);
// Копирование фейерверков
int stp=1, x1, x2, y1, y2, a, b, u1, u2, v1, v2;
for (i=0; i<SnowN; i++)
if (!Snow[i].death)
{
x1=Snow[i].x;
y1=Snow[i].y;
snowrect.left=((int)(Snow[i].r/Snow[i].live*4))*10;
snowrect.right=snowrect.left+10;
snowrect.top=Snow[i].color*10;
snowrect.bottom=snowrect.top+10;
lpBack->BltFast(x1, y1, lpSnow, &snowrect, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
}
// Обмен буферов
lpPrimary->Flip( NULL, DDFLIP_WAIT );
return DD_OK;
}
Для DOS
...
// Переключение страниц
wait_direct();
setvisualpage(1-frame);
setactivepage(frame);
frame=1-frame;
wait_vertic(); // ждем обратный ход луча
...
// отрисовка
...
4. Руководство пользователя
Для Win9x
При запуске программа переходит в полноэкранный режим. По нажатию клавиши «пробел» и левой кнопки мыши вызывается пауза. Скорость регулируется клавишами и . Выход из программы осуществляется по нажатию клавиши «ESC» или правой кнопки мыши.
Для DOS
Изменение скорости производится клавишами и . По нажатию клавиши «пробел» вызывается пауза. Выход из программы осуществляется по нажатию клавиши «ESC».
4.1 Минимальные системные требования:
Для DOS:
- процессор не ниже Intel 80286
- видеоадаптер EGA c 512кб памяти
- минимальный объем оперативной памяти 87 кБ
Для Win9x
- процессор не ниже Pentium Celeron 400MHz
- видеоадаптер SVGA c 4Mb памяти
- MS Windows 9x
- DirectX 6.0 или выше.
5. Литература
- Нейбауер А. Програмирование на С++/Перевод с англ. – СПб: Питер, 1995. – 168с.
- Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. – М.:Диалог – МИФИ, 1995.-288с.