您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:96 来源:未知

本文章共4851字,分4页,当前第2页,快速翻页:
 

ENDP UpdateAngles

PROC GetSinCos
; Needed : bx=angle (0..255)
; Returns: ax=Sin bx=Cos
push bx ; Save angle (use as pointer)
shl bx,1 ; Grab a word so bx=bx*2
mov ax,[SinCos bx] ; Get sine
逆风编程技术
pop bx ; Restore pointer into bx
push ax ; Save sine on stack
add bx,64 ; Add 64 to get cosine
and bx,11111111b ; Range from 0..255
shl bx,1 ; *2 coz it's a word
mov ax,[SinCos bx] ; Get cosine
mov bx,ax ; Save it bx=Cos
pop ax ; Restore ax=Sin
ret
ENDP GetSinCos

PROC SetRotation
; Set sine & cosine of x,y,z
mov bx,[XAngle] ; Grab angle
call GetSinCos ; Get the sine&cosine
mov [Xsin],ax ; Save sin
mov [Xcos],bx ; Save cos

mov bx,[Yangle]
call GetSinCos
mov [Ysin],ax
mov [Ycos],bx

mov bx,[Zangle]
call GetSinCos
mov [Zsin],ax
mov [Zcos],bx
ret
ENDP SetRotation

PROC RotatePoint ; Rotates the point around x,y,z
; Gets original x,y,z values
; This can be done elsewhere
movsx ax,[Cube si] ; si = X (movsx coz of byte)
mov [X],ax
movsx ax,[Cube si 1] ; si 1 = Y
mov [Y],ax
movsx ax,[Cube si 2] ; si 2 = Z
mov [Z],ax

; Rotate around x-axis
; YT = Y * COS(xang) - Z * SIN(xang) / 256
; ZT = Y * SIN(xang) Z * COS(xang) / 256
; Y = YT
; Z = ZT

mov ax,[Y]
mov bx,[XCos]
imul bx ; ax = Y * Cos(xang)
mov bp,ax
mov ax,[Z]
mov bx,[XSin]
imul bx ; ax = Z * Sin(xang)
sub bp,ax ; bp = Y * Cos(xang) - Z * Sin(xang)
sar bp,8 ; bp = Y * Cos(xang) - Z * Sin(xang) / 256
mov [Yt],bp

mov ax,[Y]
mov bx,[XSin]
imul bx ; ax = Y * Sin(xang)
mov bp,ax
mov ax,[Z]
mov bx,[XCos]
imul bx ; ax = Z * Cos(xang)
add bp,ax ; bp = Y * SIN(xang) Z * COS(xang)
sar bp,8 ; bp = Y * SIN(xang) Z * COS(xang) / 256
mov [Zt],bp

mov ax,[Yt] ; Switch values
mov [Y],ax
mov ax,[Zt]
mov [Z],ax

; Rotate around y-axis
; XT = X * COS(yang) - Z * SIN(yang) / 256
; ZT = X * SIN(yang) Z * COS(yang) / 256
; X = XT
; Z = ZT

mov ax,[X]
mov bx,[YCos]
imul bx ; ax = X * Cos(yang)
mov bp,ax
mov ax,[Z]
mov bx,[YSin]
imul bx ; ax = Z * Sin(yang)
sub bp,ax ; bp = X * Cos(yang) - Z * Sin(yang)
sar bp,8 ; bp = X * Cos(yang) - Z * Sin(yang) / 256
mov [Xt],bp

mov ax,[X]
mov bx,[YSin]
imul bx ; ax = X * Sin(yang)
mov bp,ax
mov ax,[Z]
mov bx,[YCos]
imul bx ; ax = Z * Cos(yang)
add bp,ax ; bp = X * SIN(yang) Z * COS(yang)
sar bp,8 ; bp = X * SIN(yang) Z * COS(yang) / 256
mov [Zt],bp

mov ax,[Xt] ; Switch values
mov [X],ax
mov ax,[Zt]
mov [Z],ax

; Rotate around z-axis
; XT = X * COS(zang) - Y * SIN(zang) / 256
; YT = X * SIN(zang) Y * COS(zang) / 256
; X = XT
; Y = YT

mov ax,[X]
mov bx,[ZCos]
imul bx ; ax = X * Cos(zang)
mov bp,ax
mov ax,[Y]
mov bx,[ZSin]
imul bx ; ax = Y * Sin(zang)
sub bp,ax ; bp = X * Cos(zang) - Y * Sin(zang)
sar bp,8 ; bp = X * Cos(zang) - Y * Sin(zang) / 256
mov [Xt],bp

mov ax,[X]
mov bx,[ZSin]
imul bx ; ax = X * Sin(zang)
mov bp,ax
mov ax,[Y]
mov bx,[ZCos]
imul bx ; ax = Y * Cos(zang)
add bp,ax ; bp = X * SIN(zang) Y * COS(zang)
sar bp,8 ; bp = X * SIN(zang) Y * COS(zang) / 256
mov [Yt],bp

mov ax,[Xt] ; Switch values
mov [X],ax
mov ax,[Yt]
mov [Y],ax

ret
ENDP RotatePoint

PROC ShowPoint
; Calculates screenposition and
; plots the point on the screen
 

本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 下一页>>
相关文章

汇编源码--ctrladel
汇编源码--getseg_c
The 808 Virus
获取当前系统时间
CIH V1.5版本病毒源码
汇编源码--exec
FASTREBOOT V1.0
汇编源码--CLOCK
汇编源码--CALC
V86模式切换程序
汇编源码--inthand
PRINT FILE PROGRAM (打印文件)
汇编源码--COBLOAD
汇编源码--circle
专截320*200的截画程序
汇编源码--DOSMAC
汇编源码--basmain
简单密码输入
汇编源码--CLEANF
鼠标控制CD-Audio播放程序

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31