→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Двух- и трехмерное вращение 
Автор Сообщение
Начинающий

Регистрация: 24.02.2008
Сообщения: 12

Репутация: 0 [ ? ]
Сообщение Двух- и трехмерное вращение
Двухмерное и трехмерное вращение. Исходники маленьких программ на ассемблере. Прилагаются таблицы синусов и косинусов

Двухмерное вращение

[syntax=asm];
; 2d Rotation, Coded by Ash [NLB/BD]
; Allmost no comments.. I'm sorry :(
;

p386
ideal

segment code
assume cs:code
org 100h

start:
mov ax,13h
int 10h
push 0a000h
pop es

mainloop: call docordz ; mainloop
call keyc
call vwait
call killthem
jmp mainloop

outnow: mov ax,3 ; the end
int 10h
mov ax,4c00h
int 21h

docordz: add [angle],2
and [angle],255
xor bp,bp

mov si,[angle] ; get sin(a) & cos(a)
movsx ax,[sincos+si]
mov [sinval],ax
add si,64
and si,255
movsx ax,[sincos+si]
mov [cosval],ax

dumpnow: mov ax,[cordz+bp] ; x
imul [cosval]
mov di,ax
mov ax,[cordz+bp+2] ; y
imul [sinval] ; sin + angle
sub di,ax
sar di,7
add di,160
mov bx,di

mov ax,[cordz+bp] ; x
imul [sinval]
mov di,ax
mov ax,[cordz+bp+2] ; y
imul [cosval]
add di,ax
sar di,7
add di,100

mov ax,320
imul di
add ax,bx

mov di,ax
mov [deltable+bp],di
mov [byte es:di],15

add bp,4
cmp bp,points*4
jne dumpnow
ret

killthem: xor bp,bp
mov cx,points
killem: mov di,[deltable+bp]
mov [byte es:di],0
add bp,4
loop killem
ret

vwait: mov dx,3dah ; vertical retrace
in al,dx
test al,8
jne $-3
in al,dx
test al,8
je $-3
ret

keyc: in al,60h ; last key scan
cmp al,1
je outnow
ret


label cordz word
b = -50
rept 12
a = -55
rept 12
dw a,b
a = a + 10
endm
b = b + 10
endm


angle dw 0
cosval dw ?
sinval dw ?

points equ 12*12

include "sincos.db"

deltable dw points*4 dup (?)

ends code
end start[/syntax]

Трехмерное вращение

[syntax=asm];
; 3d Rotation, coded by Ash [NLB/BD]
; Sorry that did'nt commented it too well :(
;


ideal
p386n

segment code
assume cs:code
org 100h

start:
mov ax,13h ; init vga
int 10h
push 0a000h
pop es

mainloop: add [xangle],1 ; increase x,y,z-angles
and [xangle],255
add [yangle],1
and [yangle],255
add [zangle],1
and [zangle],255

mov bx,[xangle] ; get x,y,z,-sin/cos value
movsx bp,[sincos+bx]
mov [xsin],bp
add bx,64
and bx,255
movsx bp,[sincos+bx]
mov [xcos],bp
mov bx,[yangle]
movsx bp,[sincos+bx]
mov [ysin],bp
add bx,64
and bx,255
movsx bp,[sincos+bx]
mov [ycos],bp
mov bx,[zangle]
movsx bp,[sincos+bx]
mov [zsin],bp
add bx,64
and bx,255
movsx bp,[sincos+bx]
mov [zcos],bp

xor si,si
morepoints: mov ax,[coords+si+2] ; do calculations
imul [xcos]
mov bp,ax
mov ax,[coords+si+4]
imul [xsin]
sub bp,ax
mov [yt],bp
mov ax,[coords+si+2]
imul [xsin]
mov bp,ax
mov ax,[coords+si+4]
imul [xcos]
add bp,ax
mov [zt],bp
mov ax,[yt]
sar ax,7
mov [y],ax
mov ax,[zt]
sar ax,7
mov [z],ax

mov ax,[coords+si]
imul [ycos]
mov bp,ax
mov ax,[z]
imul [ysin]
sub bp,ax
mov [xt],bp
mov ax,[coords+si]
imul [ysin]
mov bp,ax
mov ax,[z]
imul [ycos]
add bp,ax
mov [zt],bp
mov ax,[xt]
sar ax,7
mov [x],ax
mov ax,[zt]
sar ax,7
mov [z],ax

mov ax,[x]
imul [zcos]
mov bp,ax
mov ax,[y]
imul [zsin]
sub bp,ax
mov [xt],bp
mov ax,[x]
imul [zsin]
mov bp,ax
mov ax,[y]
imul [zcos]
add bp,ax
mov [yt],bp
mov ax,[xt]
sar ax,7
mov [x],ax
mov ax,[yt]
sar ax,7
mov [y],ax

mov ax,200
imul [x]
mov bp,[z]
add bp,200
idiv bp
add ax,160
mov cx,ax

mov ax,200
imul [y]
mov bp,[z]
add bp,200
idiv bp
add ax,100

mov di,ax
shl di,8
shl ax,6
add di,ax
add di,cx

mov [erase+si],di
mov [byte es:di],15

add si,6
cmp si,points
jne morepoints

mov dx,3dah
in al,dx
test al,8
jne $-3
in al,dx
test al,8
je $-3

xor si,si ; erase the points again
killem: mov di,[erase+si]
mov [byte es:di],0
add si,6
cmp si,points
jne killem

in al,60h
cmp al,1
jne mainloop

mov ax,3
int 10h
mov ax,4c00h
int 21h


points equ 200*3

xangle dw 0
yangle dw 0
zangle dw 0

xsin dw ?
xcos dw ?
ysin dw ?
ycos dw ?
zsin dw ?
zcos dw ?

xt dw ?
yt dw ?
zt dw ?

x dw ?
y dw ?
z dw ?

include "sincos.db"
include "coords.db"

erase dw points dup (?)

ends code
end start[/syntax]

Таблица координат точек

[syntax=asm]label coords word
DB 0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0
DB 0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0
DB 60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0
DB 0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0
DB 0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0
DB 60,0,0,0,0,0,60,0,0,0,0,0,60,0,0,0,0,0,60,0
DB 0,0,42,0,42,0,14,0,40,0,42,0,26,0,33,0,42,0,36,0
DB 23,0,42,0,41,0,10,0,42,0,42,0,252,255,42,0,39,0,239,255
DB 42,0,31,0,227,255,42,0,20,0,219,255,42,0,7,0,214,255,42,0
DB 249,255,214,255,42,0,236,255,219,255,42,0,225,255,227,255,42,0,217,255
DB 239,255,42,0,214,255,252,255,42,0,215,255,10,0,42,0,220,255,23,0
DB 42,0,230,255,33,0,42,0,242,255,40,0,42,0,0,0,42,0,42,0
DB 0,0,60,0,0,0,19,0,57,0,0,0,37,0,47,0,0,0,50,0
DB 33,0,0,0,58,0,15,0,0,0,60,0,251,255,0,0,55,0,232,255
DB 0,0,44,0,215,255,0,0,29,0,203,255,0,0,10,0,197,255,0,0
DB 246,255,197,255,0,0,227,255,203,255,0,0,212,255,215,255,0,0,201,255
DB 232,255,0,0,196,255,251,255,0,0,198,255,15,0,0,0,206,255,33,0
DB 0,0,219,255,47,0,0,0,237,255,57,0,0,0,0,0,60,0,0,0
DB 0,0,42,0,214,255,14,0,40,0,214,255,26,0,34,0,214,255,36,0
DB 23,0,214,255,41,0,10,0,214,255,42,0,252,255,214,255,39,0,239,255
DB 214,255,31,0,227,255,214,255,20,0,219,255,214,255,7,0,214,255,214,255
DB 249,255,214,255,214,255,236,255,219,255,214,255,225,255,227,255,214,255,217,255
DB 239,255,214,255,214,255,252,255,214,255,215,255,10,0,214,255,220,255,23,0
DB 214,255,230,255,34,0,214,255,242,255,40,0,214,255,0,0,42,0,214,255
DB 0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0
DB 0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0
DB 196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255
DB 0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0
DB 0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0
DB 196,255,0,0,0,0,196,255,0,0,0,0,196,255,0,0,0,0,196,255[/syntax]



24.02.2008 17:36
Профиль
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
© 2013 «Форум программистов Украины»