
- •Часть 1
- •Содержание
- •1 Цель работы
- •2 Зрительное восприятие быстрой смены образов
- •3 Практическое задание
- •4 Синтез динамических эффектов с анализом возможности
- •5 Практическое задание по модификации алгоритма
- •6 Анализ взаимодействия и свойств объектов
- •7 Практическое задание
- •1 Цель работы
- •2 Динамические эффекты с корректировками по условиям
- •3 Практическое задание по модификации алгоритма "Волны"
- •4 Динамические эффекты с анализом состояния процесса
- •6 Синтез простых трехмерных динамических образов
- •7 Практическое задание по модификации алгоритма
- •8 Моделирование динамического процесса с анализом
- •9 Практическое задание
- •1 Цель работы
- •2 Процедуры перемещения и масштабирования фигур
- •3 Практическое задание по отображению сложного движения
- •4 Отслеживание положения и ориентации объекта
- •5 Практическое задание по моделированию движения
- •6 Модификация контурного изображения
- •7 Практическое задание
- •8 Мультипликация с чередованием видеостраниц
- •9 Практическое задание
- •1 Цель работы
- •2 Мультипликация чередованием набора образов
- •3 Практическое задание
- •4 Работа с набором взаимодействующих образов
- •3 Практическое задание
- •Часть 1
6 Синтез простых трехмерных динамических образов
При синтезе трехмерных графических образов обычно объект или набор объектов задается набором пространственных координат своих узловых точек. Затем определяются координаты перспективной проекции этих точек на визуальную плоскость. Ниже приведен простейший алгоритм создания трехмерной динамической сцены, где не стоит задача удаления невидимых частей трехмерного образа ввиду предельной простоты самих объектов (рисунок 1).
Задается скорость по оси Z(speed) для набора пикселей. Если какой-либо пиксель выходит из зоны видимости, то для него генерируются новые координаты в дальней части зоны видимости, моделируя перемещение наблюдателя относительно бесконечного набора пикселей. Цвет пикселей по мере приближения ( уменьшения координатыZ) становится более ярким.
{--------------------------------------------------------------------------------------
"Межзвездный полет" -
перспективная проекция движущегося трехмерного образа.
---------------------------------------------------------------------------------------}
uses crt,graph;
const N=100; { число звезд }
view=200; { дистанция просмотра }
speed=50; { скорость полета }
var x,y,z,_x,_y,color: array[1..N] of integer;
i,gm,gd,gx,gy,xc,yc :integer;
speed
begin randomize;
for i:=1 to N do begin
{ установка начальных координат звезд }
x[i]:=-10*view +random(20*view);
y[i]:=-10*view +random(20*view);
z[i]:= view +random(20*view)
end;
Z
gd:=0; initgraph(gd,gm,'');
xc:=GetmaxX div 2; экран
yc:=GetmaxY
div 2; Y X view
REPEAT Рисунок 1
{ Расчет перспективных проекций звезд и их вывод }
for i:=1 to N do
{ если проекция звезды в пределах экрана }
if( z[i]/(abs(x[i])+1) > view/xc)
and( z[i]/(abs(y[i])+1) > view/yc)
then begin
{ вычисление координат с учетом перспективы }
_x[i]:=xc +round( x[i]*(view/z[i]));
_y[i]:=yc +round( y[i]*(view/z[i]));
putpixel(_x[i],_y[i],color[i]) end
else
{ для вышедших из поля зрения звезд переназначаем координаты }
z[i]:=view +random(20*view);
delay(50); { задержка видимости набора звезд }
for i:=1 to N do begin
dec( z[i], speed); { смена координат звезд }
{ цвет зависит от дальности }
if z[i]<4*view then color[i]:=14
else if z[i]<9*view then color[i]:=11
else color[i]:= 9 end;
{ стирание по старым координатам }
for i:=1 to N do putpixel(_x[i],_y[i],0);
until KeyPressed; CloseGraph END.
7 Практическое задание по модификации алгоритма
"Межзвездный полет"
7.1 Смоделировать различные типы обзора при "движении среди звезд": боковой, задний, под определенным углом к направлению
движения.
7.2 Смоделировать вращение вокруг одной из осей координат
при движении.
7.3 Вместо пикселей в качестве объектов использовать какие-либо простые фигуры (например, окружности), задавая увеличение их размера по мере приближения.