Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Методи програмування динамічних зображень
Анімацією називають вивід що змінюється, динамічного зображення. Ілюзію зображення, що рухається, створює перегляд послідовності нерухомих зображеннь-кадрів, що показують різні фази руху. Щоб вивести на екран дисплея динамічне зображення, треба запрограмувати вивід послідовності кадрів. Швидкість зміни кадрів при цьому повинна бути досить великою. Якщо кожний кадр містить складне зображення, що складається з великої кількості графічних елементів, вирішити проблему швидкого виведення кадрів на екран непросто. Найпростіший метод анімації - перемальовування графічного екрана. Незважаючи на простоту зображень, очевидним виявляється мерехтіння зображення і його "посмикування" при перемальовуванні, Так можна використати такий метод, що виводить поверхню задавши рівняння:
(1.38)
де а – амплітуда, a t – параметр, що грає роль часу. Анімація використається для виведення тимчасової залежності графіка функції. Оскільки мова йде про вивід тривимірного об’єкта, необхідно вибрати проекцію, наприклад симетричну поверхня зображується лініями її перетинання із площинами, паралельними площинам х0z і у0z. Через певний час попереднє зображення "затирається" чорними кольорами. При цьому спостерігається неприємне мерехтіння екрана. Позбутися від зазначеного недоліку можна, використовуючи сторінки відеопам’яті. Організація відеопам’яті така, що в деяких режимах роботи відеоадаптера є кілька сторінок відеопам’яті. На екрані дисплея відображається тільки одна з них, а всі інші можуть бути в цей час використані для побудови чергового кадру анімаційного зображення [17]. Подальша оптимізація може бути досягнута за рахунок більш акуратного програмування основних графічних процедур. Для цього, як правило, доводиться вставляти у вихідний текст програми фрагменти коду мовою асемблера [3]. Є й інші проблеми, які доводиться вирішувати при програмуванні динамічних зображень. Так, наприклад, переміщення об’єкта може відбуватися на тлі нерухомого зображення. При цьому необхідно тимчасово зберігати невидимі ділянки тла й відновлювати його після того, як об’єкт зміститься в нове положення. Одне з рішень даної проблеми полягає у використанні спрайтів – апаратних або програмних засобів формування динамічного зображення. Спрайт являє собою растрове зображення невеликого розміру, що може переміщатися по екрані незалежно від іншої "картинки". Спрайт накладається на основне зображення, перекриваючи його [15].
На сьогоднішній час для програмування 3d-анімації використовуються спеціалізовані програмні засоби, які в більшій мірі використовують можливості сучасних відеокарт, які самі проводять необхідні обрахунки вершин, обробляють зображення і виводять його на екран. Швидкість обрахунку необхідних операцій настільки велика, що практично є моментальною, швидкість зміни зображення на екрані відбувається швидше, ніж встигає це помітити людське око [15].
РОЗДІЛ ІІ. ПРАКТИЧНА РЕАЛІЗАЦІЯ 3D ОБ’ЄКТІВ ТА ДИНАМІЧНИХ ПОДІЙ
Модуль обробки 3d об’єктів
Для відображення можливостей роботи із об’ємними фігурами нами було створено відповідний модуль, що дає змогу: - перетворювати 3d координати в 2d координати монітора; - вибирати відповідну проекцію за бажанням користувача; - повертати точку відносно центру координат; - повертати точку відносно певного вектору; - відображати на екрані лінію, точку задану відповідними просторовими координатами; - проводити масштабування точок відносно початку координат; - рухати точку у довільному напрямку. Розглянемо більш детально даний модуль: Перш за все, в ньому оголошено глобальні зміні, які відповідатимуть за координати точки в просторі, на екрані:
type vector=array[1..3] of Real; projection=array[1..2] of vector; type Toch2d=record x,y:integer; end; type Toch3d=record x,y,z:real; end; var abs_x_center, abs_y_center: Integer; DriverP: Pointer; Даний модуль містить ряд функцій, а саме, функції Procedure open_graph та Procedure close_graph відповідають за ініціалізацію та вихід із графічного режиму. Процедура Procedure out_text_XY(ss: String; x,y:integer; color: Word) відповідає за відображення текстового рядка заданим кольором за відповідними координатами. Процедура Procedure put_picxel(d2:Toch2d; color: Word) за координатами точки у двохвимірному просторі за заданим кольором відображає її на екран. Процедура Procedure norm_line(d2_0,d2_1:Toch2d; color:word) за координатами 2 точок у двохвимірному просторі за заданим кольором будує на екран лінію.
Дані процедури побудовані на основі стандартних функцій. Відповідно до формул 1.33 та 1.34 вибору проекцій відображення побудовані матриці перетворення в ізометричній, диметричній та ортогональній проекції. Дані матриці необхідні для переходу від 3d до 2d координат:
Procedure computer_isometric_matrix(var P:projection); Begin P[1,1]:=-1.0/Sqrt(2.0); P[1,2]:=-P[1,1]; P[1,3]:=0.0; P[2,1]:=-1.0/Sqrt(6.0); P[2,2]:=P[2,1]; P[2,3]:=-2.0*P[2,1]; End; Procedure computer_dimetric_matrix(alpha: Real; var P: projection); Var t: Real; Begin alpha:=pi*alpha/180.0; P[1,1]:=-1.0/Sqrt(2.0); P[1,2]:=-P[1,1]; P[1,3]:=0.0; t:=Sin(alpha)/cos(alpha); P[2,1]:=t*P[1,1]; P[2,2]:=P[2,1]; P[2,3]:=Sqrt(1.0-Sqr(t)); End; Procedure computer_oblique_matrix(alpha: Real; var P: projection); Begin alpha:=pi*alpha/180.0; P[1,1]:=-Sin(alpha); P[1,2]:=1.0; P[1,3]:=0.0; P[2,1]:=-Cos(alpha); P[2,2]:=0.0; P[2,3]:=1.0; End;
Процедура повороту точки відносно початку координат побудована у відповідності до формул 1.12 – 1.22 і має вигляд:
Procedure povorot(var mas:Toch3d; kx,ky,kz:real); var tx,ty,tz,y,x,z:real; Begin tx:=mas.x; ty:=mas.y*cos(kx*pi/180)+mas.z*sin(kx*pi/180); tz:=mas.y*(-sin(kx*pi/180))+mas.z*cos(kx*pi/180); y:=ty; x:=tx*cos(ky*pi/180)+tz*(-sin(ky*pi/180)); z:=tx*sin(ky*pi/180)+tz*cos(ky*pi/180); mas.z:=z; mas.x:=x*cos(kz*pi/180)+y*sin(kz*pi/180); mas.y:=-x*sin(kz*pi/180)+y*cos(kz*pi/180); End; У відповідності до формули 1.25 побудована процедура руху точки: Procedure rux(var mas:Toch3d; dx,dy,dz:real); Begin mas.x:=mas.x+dx; mas.y:=mas.y+dy; mas.z:=mas.z+dz; End;
У відповідності до формули 1.27 побудована процедура масштабування:
Procedure mach(var mas:Toch3d; mx,my,mz:real); Begin mas.x:=mas.x*mx; mas.y:=mas.y*my; mas.z:=mas.z*mz; End;
Для переходу з трьохмірої моделі до двомірної використовується процедура project(const P:projection; const d3:Toch3d; const c:Toch2d; var d2:Toch2d), що за заданими координатами 3d точки та вибраною матрицею проекції проводить перевід у двовимірні координати монітору: Procedure project(const P:projection; const d3:Toch3d; const c:Toch2d; var d2:Toch2d);
Begin d2.x:=c.x+Round(P[1,1]*d3.x+P[1,2]*d3.y+P[1,3]*d3.z); d2.y:=c.y+Round(P[2,1]*d3.x+P[2,2]*d3.y+P[2,3]*d3.z); End;
Даного модуля в принципі достатньо для реалізації побудови 3d об’єктів, анімації. Адже більшість операцій відбувається саме із вершинами об’єкта, а даний модуль саме їх і описує.
|
||||||
Последнее изменение этой страницы: 2020-03-02; просмотров: 118; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.20.205.228 (0.011 с.) |