BigEdu.ru

Графика на языке Assembler

Федеральное агентство по образованию

ГОУ ВПО

Уфимский государственный авиационный технический университет

Курсовая работа

по дисциплине «Микропрограммирование»

«Графика на языке Assembler»

Выполнил:

студент гр. ПО-228

Елизарьев Д.И.

Уфа

2008

1. Постановка задачи

Необходимо разработать программу, выводящую на экран трехмерный куб, и позволяющую поворачивать его с помощью клавиш.

Программа реализована на языке “Assembler”. Для вывода графики на экран используется прямое обращение к видеобуферу. Для достижения плавности прорисовки изображения применяется синхронизация с вертикальной развёрткой монитора.

Повороты вокруг осей производятся по следующим формулам:

· Вокруг оси X:

· Вокруг оси Y:

· Вокруг оси Z:

Для рисования линии используется алгоритм Брезенхэма.

Значения синуса и косинуса вычисляются при помощи таблицы синусов для углов от 0 до 90 градусов.

2. Текст программы.

DATASSEGMENT

X DW 0 ;Промежуточнаякоордината X

Y DW 0 ;Промежуточная координата Y

Z DW 0 ;Промежуточная координата Z

ANX DW 0 ;Текущий угол поворота вокруг оси X

ANY DW 0 ;Текущий угол поворота вокруг оси Y

ANZ DW 0 ;Текущий угол поворота вокруг оси Z

DeltaX DW 2 ;Приращение угла поворота вокруг оси X

DeltaY DW 2 ;Приращение угла поворота вокруг оси Y

DeltaZ DW 2 ;Приращение угла поворота вокруг оси Z

X2D DW 0 ;Проекция трехмерной точки на плоскость

Y2D DW 0 ;

X1 DW 0 ;Координаты

Y1 DW 0 ;начала и

X2 DW 0 ;конца

Y2 DW 0 ;линии

DelX DW 0 ;Промежуточные

DelY DW 0 ;переменные,

LenX DW 0 ;используемые

LenY DW 0 ;в процедуре

Leng DW 0 ;рисования

D DW 0 ;линии

COLOR DB 10 ;Цвет фигуры

FULLCIRCLE DW 360 ;Константа = 360 градусов

POINTS DW 8 ;Количество вершин

WID DW 320 ;Ширина экрана

;Таблица синусов углов от 0 до 90 градусов.

;Каждое значение синуса умножено на 512

SINES DW 0, 9, 18, 27, 36, 45

DW 54, 62, 71, 80, 89

DW 98, 106, 115, 124, 133

DW 141, 150, 158, 167, 175

DW 183, 192, 200, 208, 216

DW 224, 232, 240, 248, 256

DW 264, 271, 279, 286, 294

DW 301, 308, 315, 322, 329

DW 336, 343, 349, 356, 362

DW 368, 374, 380, 386, 392

DW 398, 403, 409, 414, 419

DW 424, 429, 434, 439, 443

DW 448, 452, 456, 460, 464

DW 468, 471, 475, 478, 481

DW 484, 487, 490, 492, 495

DW 497, 499, 501, 503, 504

DW 506, 507, 508, 509, 510

DW 511, 511, 512, 512, 512

;Координаты вершин куба

CUBE DW 20, 20, 20

DW 20, 20, -20

DW 20, -20, -20

DW 20, -20, 20

DW -20, -20, 20

DW -20, 20, 20

DW -20, 20, -20

DW -20, -20, -20

DATAS ENDS

CODES SEGMENT

ASSUME DS:DATAS, CS:CODES

FIND_SIN PROC ;Нахождение синуса угла от 0 до 360 градусов

push ax

push cx

sub cx, cx

cmp ax, 181

jb SIN_POS

mov cx, 8000h

sub ax, 180

SIN_POS:

cmp ax, 91

jb GET_SIN

neg ax

add ax, 180

GET_SIN:

mov bx, ax

shl bx, 1

mov bx, sines[bx]

cmp cx, 8000h

jne NE1

neg bx

NE1:

pop cx

pop ax

ret

FIND_SIN ENDP

FIND_COS PROC ;Нахождение косинуса угла от 0 до 360 градусов

push ax

push cx

sub cx, cx

cmp ax, 91 ;если угол 90 и меньше,

jb COS_POS ;то знак положительный

cmp ax, 269 ;если угол 270 и больше, то знак "плюс"

jg CP

mov cx, 8000h ;иначе ставим флаг в CX, что знак "минус"

sub ax, 90 ;делаем поправку на 90

cmp ax, 91

jb GET_COS ;если < 91

neg ax ;иначеугол = 180 - угол

add ax, 180

jmp GET_COS

CP:

sub ax, 270 ;угол = 270 - угол

jmp GET_COS

COS_POS:

neg ax

add ax, 90

cmp ax, 91

jb GET_COS

neg ax

add ax, 360

GET_COS: ;достаём значение косинуса из таблицы синусов

mov bx, ax

shl bx, 1

mov bx, sines[bx]

cmp cx, 8000h

jne NE2 ;если знак "минус",

neg bx ;то меняем знак

NE2:

pop cx

pop ax

ret

ENDP FIND_COS

PUTPIXEL PROC ;Рисование точки в X2D, Y2D, цветом COLOR

push ax

push di

mov ax, 100 ;Высота экрана/2

sub ax, Y2D

push dx

mul WID ;Index = Y * WIDTH

pop dx

add ax, X2D ;Index + X

add ax, 160

mov di, ax

mov al, COLOR

mov byte ptr ES:[di], al ;рисуемточку

pop di

pop ax

ret

ENDP PUTPIXEL

PROJECTPROC ;Проецирование трёхмерной точки на плоскость

push ax

mov ax, X

mov X2D, ax

mov ax, Y

mov Y2D, ax

pop ax

ret

ENDP PROJECT

ROTX PROC ;Поворот точки вокруг оси X

push cx

push ax

push bx

push dx

mov

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Курсовые работы по коммуникации и связи Федеральное агентство по образованию ГОУ ВПО Уфимский государственный авиационный технический университет Курсовая работа по дисциплине
Оценок: 1000 (Средняя 5 из 5)

Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.

© 2016 - 2022 BigEdu.ru