亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 一個旋轉的3d箱子(動畫).txt

?? 這個程序是巧妙的利用了坐標的不斷變化
?? TXT
字號:
;本程序由國外的Vulture大哥編寫,并公布了源碼,這個是他95年的一個作品,可以說是在當時是非常成功的!

;這個程序是巧妙的利用了坐標的不斷變化,從而實現了由星星構成的箱子3D轉動!

;為了尊重版權,本人未對源碼注釋進行翻譯,這樣做也可以讓國內的匯編愛好者自己琢磨國外的匯編編程的思維!

;編譯方法: 1 tasm 3d.asm

;           2 tlink 3d.obj

;           3 exe2bin 3d.exe 3d.com

 

;本程序是站長精心收集的一個很經典的3D小動畫. 站長的x86匯編小站:http://www.x86asm.com 

;                                                    永久域名:http://x86asm.yeah.net

;==============================================================================;
;                                                                              ;
;   Assembler Program By Vulture.                                              ;
;   3D-system example. Use the following formulas to rotate a point:           ;
;                                                                              ;
;        Rotate around x-axis                                                  ;
;        YT = Y * COS(xang) - Z * SIN(xang) / 256                              ;
;        ZT = Y * SIN(xang) + Z * COS(xang) / 256                              ;
;        Y = YT                                                                ;
;        Z = ZT                                                                ;
;                                                                              ;
;        Rotate around y-axis                                                  ;
;        XT = X * COS(yang) - Z * SIN(yang) / 256                              ;
;        ZT = X * SIN(yang) + Z * COS(yang) / 256                              ;
;        X = XT                                                                ;
;        Z = ZT                                                                ;
;                                                                              ;
;        Rotate around z-axis                                                  ;
;        XT = X * COS(zang) - Y * SIN(zang) / 256                              ;
;        YT = X * SIN(zang) + Y * COS(zang) / 256                              ;
;        X = XT                                                                ;
;        Y = YT                                                                ;
;                                                                              ;
;   Divide by 256 coz we have multiplyd our sin values with 256 too.           ;
;   This example isn't too fast right now but it'll work just fine.            ;
;                                                                              ;
;       Current Date: 6-9-95         Vulture                                   ;
;                                                                              ;
;==============================================================================;

IDEAL                           ; Ideal mode
P386                            ; Allow 80386 instructions
JUMPS                           ; Tasm handles out of range jumps (rulez!:))
                      
SEGMENT CODE                    ; Code segment starts
ASSUME cs:code,ds:code          ; Let cs and ds point to code segment
 
ORG 100h                        ; Make a .COM file
 
START:                          ; Main program
 
    mov     ax,0013h            ; Init vga
    int     10h
           
    mov     ax,cs
    mov     ds,ax               ; ds points to codesegment
    mov     ax,0a000h
    mov     es,ax               ; es points to vga

    lea     si,[Palette]        ; Set palette
    mov     dx,3c8h
    xor     al,al
    out     dx,al
    mov     dx,3c9h
    mov     cx,189*3
    repz    outsb

; === Set some variables ===
    mov     [DeltaX],1          ; Initial speed of rotation
    mov     [DeltaY],1          ; Change this and watch what
    mov     [DeltaZ],1          ; happens. It's fun!

    mov     [Xoff],256
    mov     [Yoff],256          ; Used for calculating vga-pos
    mov     [Zoff],300          ; Distance from viewer

MainLoop:
    call    MainProgram         ; Yep... do it all... ;-)

    in      al,60h              ; Scan keyboard
    cmp     al,1                ; Test on ESCAPE
    jne     MainLoop            ; Continue if not keypressed

; === Quit to DOS ===
    mov     ax,0003h            ; Back to textmode
    int     10h
    lea     dx,[Credits]
    mov     ah,9
    int     21h
    mov     ax,4c00h            ; Return control to DOS
    int     21h                 ; Call DOS interrupt

; === Sub-routines ===
           
PROC WaitVrt                    ; Waits for vertical retrace to reduce "snow"
    mov     dx,3dah
Vrt:
    in      al,dx
    test    al,8
    jnz     Vrt                 ; Wait until Verticle Retrace starts
NoVrt:
    in      al,dx
    test    al,8
    jz      NoVrt               ; Wait until Verticle Retrace ends
    ret                         ; Return to main program
ENDP WaitVrt

PROC UpdateAngles
; Calculates new x,y,z angles
; to rotate around
    mov     ax,[XAngle]         ; Load current angles
    mov     bx,[YAngle]
    mov     cx,[ZAngle]
           
    add     ax,[DeltaX]         ; Add velocity
    and     ax,11111111b        ; Range from 0..255
    mov     [XAngle],ax         ; Update X
    add     bx,[DeltaY]         ; Add velocity
    and     bx,11111111b        ; Range from 0..255
    mov     [YAngle],bx         ; Update Y
    add     cx,[DeltaZ]         ; Add velocity
    and     cx,11111111b        ; Range from 0..255
    mov     [ZAngle],cx         ; Update Z
    ret
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
    mov     ax,[Xoff]           ; Xoff*X / Z+Zoff = screen x
    mov     bx,[X]
    imul    bx
    mov     bx,[Z]
    add     bx,[Zoff]           ; Distance
    idiv    bx
    add     ax,[Mx]             ; Center on screen
    mov     bp,ax

    mov     ax,[Yoff]           ; Yoff*Y / Z+Zoff = screen y
    mov     bx,[Y]
    imul    bx
    mov     bx,[Z]
    add     bx,[Zoff]           ; Distance
    idiv    bx
    add     ax,[My]             ; Center on screen
           
    mov     bx,320
    imul    bx
    add     ax,bp               ; ax = (y*320)+x
    mov     di,ax

    mov     ax,[Z]              ; Get color from Z
    add     ax,100d             ; (This piece of code could be improved)

    mov     [byte ptr es:di],al ; Place a dot with color al
    mov     [Erase+si],di       ; Save position for erase
    ret
ENDP ShowPoint

PROC MainProgram
    call    UpdateAngles        ; Calculate new angles
    call    SetRotation         ; Find sine & cosine of those angles

    xor     si,si               ; First 3d-point
    mov     cx,MaxPoints
ShowLoop:  
    call    RotatePoint         ; Rotates the point using above formulas
    call    ShowPoint           ; Shows the point
    add     si,3                ; Next 3d-point
    loop    ShowLoop

    call    WaitVrt             ; Wait for retrace

    xor     si,si               ; Starting with point 0
    xor     al,al               ; Color = 0 = black
    mov     cx,MaxPoints
Deletion:
    mov     di,[Erase+si]       ; di = vgapos old point
    mov     [byte ptr es:di],al ; Delete it
    add     si,3                ; Next point
    loop    Deletion
    ret
ENDP MainProgram

; === DATA ===
           
Credits   DB   13,10,"Code by Vulture / Outlaw Triad",13,10,"$"

Label SinCos Word       ; 256 values
dw 0,6,13,19,25,31,38,44,50,56
dw 62,68,74,80,86,92,98,104,109,115
dw 121,126,132,137,142,147,152,157,162,167
dw 172,177,181,185,190,194,198,202,206,209
dw 213,216,220,223,226,229,231,234,237,239
dw 241,243,245,247,248,250,251,252,253,254
dw 255,255,256,256,256,256,256,255,255,254
dw 253,252,251,250,248,247,245,243,241,239
dw 237,234,231,229,226,223,220,216,213,209
dw 206,202,198,194,190,185,181,177,172,167
dw 162,157,152,147,142,137,132,126,121,115
dw 109,104,98,92,86,80,74,68,62,56
dw 50,44,38,31,25,19,13,6,0,-6
dw -13,-19,-25,-31,-38,-44,-50,-56,-62,-68
dw -74,-80,-86,-92,-98,-104,-109,-115,-121,-126
dw -132,-137,-142,-147,-152,-157,-162,-167,-172,-177
dw -181,-185,-190,-194,-198,-202,-206,-209,-213,-216
dw -220,-223,-226,-229,-231,-234,-237,-239,-241,-243
dw -245,-247,-248,-250,-251,-252,-253,-254,-255,-255
dw -256,-256,-256,-256,-256,-255,-255,-254,-253,-252
dw -251,-250,-248,-247,-245,-243,-241,-239,-237,-234
dw -231,-229,-226,-223,-220,-216,-213,-209,-206,-202
dw -198,-194,-190,-185,-181,-177,-172,-167,-162,-157
dw -152,-147,-142,-137,-132,-126,-121,-115,-109,-104
dw -98,-92,-86,-80,-74,-68,-62,-56,-50,-44
dw -38,-31,-25,-19,-13,-6

Label Cube Byte           ; The 3d points
       c = -35            ; 5x*5y*5z (=125) points
       rept 5
         b = -35
         rept 5
           a = -35
           rept 5
             db a,b,c
             a = a + 20
           endm
           b = b + 20
         endm
         c = c + 20
       endm

Label Palette Byte              ; The palette to use
       db 0,0,0                 ; 63*3 gray-tint
       d = 63
       rept 63
         db d,d,d
         db d,d,d
         db d,d,d
         d = d - 1
       endm

X      DW ?             ; X variable for formula
Y      DW ?
Z      DW ?

Xt     DW ?             ; Temporary variable for x
Yt     DW ?
Zt     DW ?

XAngle DW 0             ; Angle to rotate around x
YAngle DW 0
ZAngle DW 0

DeltaX DW ?             ; Amound Xangle is increased each time
DeltaY DW ?
DeltaZ DW ?

Xoff   DW ?
Yoff   DW ?
Zoff   DW ?             ; Distance from viewer

XSin   DW ?             ; Sine and cosine of angle to rotate around
XCos   DW ?
YSin   DW ?
YCos   DW ?
ZSin   DW ?
ZCos   DW ?

Mx     DW 160            ; Middle of the screen
My     DW 100
                                
MaxPoints EQU 125        ; Number of 3d Points

Erase  DW MaxPoints DUP (?)     ; Array for deletion screenpoints

ENDS CODE                       ; End of codesegment
END START                       ; The definite end.... :)

 


; You may use this code in your own productions but
; give credit where credit is due. Only lamers steal
; code so try to create your own 3d-engine and use
; this code as an example.
; Thanx must go to Arno Brouwer and Ash for releasing
; example sources.
;
;    Ciao dudoz,
;
;         Vulture / Outlaw Triad

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人第一页| 一区二区三区蜜桃| 欧美一二三区精品| 欧美日韩第一区日日骚| 欧美三级三级三级| 欧美午夜精品一区二区蜜桃| 色婷婷久久综合| 91精品办公室少妇高潮对白| 在线观看国产精品网站| 欧美视频在线不卡| 欧美精品欧美精品系列| 在线播放91灌醉迷j高跟美女| 777午夜精品视频在线播放| 欧美一区二区三区公司| 欧美va亚洲va香蕉在线| 国产欧美一区二区精品忘忧草| 国产精品久久久久桃色tv| 专区另类欧美日韩| 亚洲一区二区偷拍精品| 裸体在线国模精品偷拍| 国产精品一二三四| 一本大道久久a久久精二百| 欧洲生活片亚洲生活在线观看| 欧美精品aⅴ在线视频| 欧美不卡在线视频| 亚洲欧美另类久久久精品2019| 亚洲va国产天堂va久久en| 日韩av网站免费在线| 国产精品一线二线三线| 91猫先生在线| 精品国产乱码久久久久久蜜臀| 国产免费久久精品| 日韩av电影免费观看高清完整版| 国产精品一区一区| 欧美日韩国产综合草草| 久久久久88色偷偷免费 | 丝袜美腿亚洲色图| 国产一区二区日韩精品| 欧日韩精品视频| 中文字幕国产一区| 视频一区中文字幕| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美精品1区2区| 亚洲丝袜美腿综合| 狠狠色丁香婷婷综合| 欧美乱妇15p| 日韩伦理免费电影| 国产精品羞羞答答xxdd| 欧美一区2区视频在线观看| 中文字幕在线不卡一区二区三区| 日韩精品成人一区二区三区| 99精品黄色片免费大全| 欧美精品一区二区久久婷婷| 五月天激情综合| 一本到高清视频免费精品| 国产三级精品三级在线专区| 青青草国产精品97视觉盛宴| 91黄色激情网站| 中文字幕一区二区三| 国产真实乱对白精彩久久| 欧美一区二区在线播放| 婷婷开心久久网| 欧美这里有精品| 一区二区在线观看视频在线观看| 国产传媒日韩欧美成人| 亚洲精品一区二区三区影院 | 91免费观看视频| 国产精品视频在线看| 经典一区二区三区| 欧美xxx久久| 久久成人久久爱| 日韩欧美国产三级电影视频| 午夜av一区二区三区| 制服丝袜日韩国产| 日本不卡视频在线观看| 日韩欧美精品在线视频| 九九热在线视频观看这里只有精品| 日韩一区二区在线观看视频 | 国产福利视频一区二区三区| 久久久精品国产99久久精品芒果| 国产一区二区影院| 国产精品久久久久久久久果冻传媒| 大尺度一区二区| 国产精品欧美久久久久一区二区| 成人三级在线视频| 一区二区三区国产| 日韩无一区二区| 国产精品自在在线| 亚洲欧美在线高清| 欧美精品在线观看播放| 久久国产生活片100| 国产丝袜美腿一区二区三区| 91婷婷韩国欧美一区二区| 五月婷婷激情综合| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产成人精品亚洲777人妖 | 久久99久久久欧美国产| 久久精品夜色噜噜亚洲a∨| 波多野结衣亚洲一区| 亚洲制服欧美中文字幕中文字幕| 欧美日韩在线一区二区| 国产一区欧美一区| 亚洲精品伦理在线| 日韩精品资源二区在线| aaa亚洲精品| 男女性色大片免费观看一区二区 | 91久久精品网| 久久99精品久久久久久动态图 | 日本一区二区电影| 欧美三级在线看| 国产aⅴ综合色| 爽好多水快深点欧美视频| 国产亚洲一区二区三区在线观看 | 亚洲不卡一区二区三区| 久久精品一二三| 欧美日韩国产a| 不卡影院免费观看| 男女性色大片免费观看一区二区| 国产精品久久久久久久久免费相片| 欧美少妇性性性| 9i看片成人免费高清| 久草精品在线观看| 午夜精品123| 亚洲女子a中天字幕| 2019国产精品| 欧美一区二区三区在线观看| 99精品欧美一区二区三区综合在线| 日韩国产精品91| 亚洲超碰97人人做人人爱| 国产精品每日更新在线播放网址| 日韩一区二区三区免费观看| 色综合视频在线观看| 国产99久久久久久免费看农村| 日韩福利电影在线观看| 亚洲高清久久久| 亚洲乱码国产乱码精品精98午夜| 国产亚洲欧洲997久久综合| 91精品国产色综合久久ai换脸| 在线观看网站黄不卡| 99久久婷婷国产| 成人国产免费视频| 国产精品一品视频| 韩日精品视频一区| 精品无人区卡一卡二卡三乱码免费卡 | 国产精品麻豆久久久| 精品国产一区二区国模嫣然| 日韩一区二区在线免费观看| 欧美一区二区国产| 日韩一区二区在线看| 日韩欧美三级在线| 精品1区2区在线观看| 2019国产精品| 国产情人综合久久777777| 国产清纯在线一区二区www| 国产午夜精品在线观看| 中文字幕av一区二区三区| 中文字幕巨乱亚洲| 国产精品久久久久久久久图文区| 国产精品久久夜| 亚洲日本va在线观看| 一区二区欧美视频| 午夜亚洲福利老司机| 麻豆中文一区二区| 丁香五精品蜜臀久久久久99网站| 成人免费视频一区二区| 色噜噜久久综合| 91精品黄色片免费大全| 精品粉嫩超白一线天av| 中文字幕免费不卡| 亚洲一区在线视频| 日韩av网站在线观看| 国产精品一区二区久久精品爱涩| 不卡视频在线观看| 欧美天天综合网| 精品三级在线看| 国产精品入口麻豆原神| 亚洲国产成人tv| 国产综合色在线视频区| 99久久国产综合精品女不卡| 欧美性欧美巨大黑白大战| 日韩三区在线观看| 国产精品免费aⅴ片在线观看| 亚洲一区在线看| 国产麻豆欧美日韩一区| 97精品视频在线观看自产线路二| 欧美系列日韩一区| 亚洲国产精品高清| 三级欧美在线一区| 成人午夜视频网站| 6080午夜不卡| 亚洲猫色日本管| 国产一区二区主播在线| 色综合天天综合色综合av | 5月丁香婷婷综合| 国产欧美一区二区精品忘忧草| 亚洲高清免费视频| av在线这里只有精品| www国产亚洲精品久久麻豆| 一区二区三区中文字幕| 国产精品正在播放|