ReferatWorld.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)

Одними из наиболее популярных услуг на рынке IT-технологий являются создание и продвижение лендингов. Они способны положительно влиять на деятельность любого бизнес-проекта в интернете. Судя по многочисленным отзывам, заказавшие создание лендингов люди ни разу не пожалели о потраченных деньгах. Они вложили в будущее, которое неразрывно связано с интернетом. Всё больше и больше предпринимателей обращаются к услугам разных агентств, веб-студий, чтобы заказать создание лендинга у профессионалов.

© 2017 - 2022 ReferatWorld.ru