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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: Google [Bot]


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

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