diff --git a/programs/test3d.asm b/programs/test3d.asm new file mode 100644 index 0000000..d57fcb7 --- /dev/null +++ b/programs/test3d.asm @@ -0,0 +1,245 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\fat.h" +include "..\include\divers.h" +include "..\include\3d.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +data: + +camera vertex3d <320.0,240.0,70.0> + +zoom dd 5.0 +rot1 dd 0.1 +rot2 dd -0.1 + +vertexnbp dw 15 +dd 0.0,0.0,0.0 +dd 20.0,0.0,0.0 +dd 24.0,0.0,0.0 +dd 20.0,-2.0,0.0 +dd 20.0,2.0,0.0 +dd 0.0,0.0,0.0 +dd 0.0,20.0,0.0 +dd 0.0,24.0,0.0 +dd -2.0,20.0,0.0 +dd 2.0,20.0,0.0 +dd 0.0,0.0,0.0 +dd 0.0,0.0,20.0 +dd 0.0,0.0,24.0 +dd -2.0,-2.0,20.0 +dd 2.0,2.0,20.0 + +facenbp dw 6 +dw 0,1,1 +dw 2,4,3 +dw 5,6,6 +dw 7,9,8 +dw 10,11,11 +dw 12,14,13 + +vertexnbp2 dw 15 +dd 0.0,0.0,0.0 +dd 20.0,0.0,0.0 +dd 24.0,0.0,0.0 +dd 20.0,-2.0,0.0 +dd 20.0,2.0,0.0 +dd 0.0,0.0,0.0 +dd 0.0,20.0,0.0 +dd 0.0,24.0,0.0 +dd -2.0,20.0,0.0 +dd 2.0,20.0,0.0 +dd 0.0,0.0,0.0 +dd 0.0,0.0,20.0 +dd 0.0,0.0,24.0 +dd -2.0,-2.0,20.0 +dd 2.0,2.0,20.0 + + +mat1 mat +mat2 mat +mat3 mat +matrixp mat + +mode db 0 + +objectp: +vertexp equ objectp+15 +facep equ vertexp+20000 +screen equ facep+20000 + +;typep db ? +;objectp db 15 dup (?) +;vertexp db 1000*4*3+2 dup (?) +;facep db 2000*3+2 dup (?) +;screen db 1000*2*2 dup (?) + + +realstart: + call [cs:savestate] + call [cs:setvideomode],10 + call [cs:clearscreen] + call [cs:mballoc],65535 + mov es,ax + mov si,offset data + mov di,si + mov ecx,(offset realstart-offset data) + shr ecx,2 + inc ecx + cld + rep movsd + call [cs:projfile],offset filename + jc errorloading + call [cs:mbfind],offset filename + jc errorloading + push es + pop ds + mov es,ax + call [cs:load3ds],es,0,offset objectp,offset vertexp,offset matrixp,offset facep + call [cs:transform],offset vertexnbp,offset matrixp + call [cs:identity],offset mat1 + jmp show +rool: + mov ah,1 + int 16h + jz rool + xor ax,ax + int 16h + cmp ax,011Bh + je endee + cmp ax,3B00h + jne notmode + inc [mode] + cmp [mode],3 + jb notmodify + mov [mode],0 + jmp notmodify +notmode: + cmp ax,4800h + jne notup + call [cs:rotationx],offset mat1,[rot2] + jmp show +notup: + cmp ax,5000h + jne notdown + call [cs:rotationx],offset mat1,[rot1] + jmp show +notdown: + cmp ax,4B00h + jne notleft + call [cs:rotationy],offset mat1,[rot1] + jmp show +notleft: + cmp ax,4D00h + jne notright + call [cs:rotationy],offset mat1,[rot2] + jmp show +notright: + cmp ax,4900h + jne notupup + call [cs:rotationz],offset mat1,[rot1] + jmp show +notupup: + cmp ax,5100h + jne notdowndown + call [cs:rotationz],offset mat1,[rot2] + jmp show +notdowndown: + cmp ax,4A2Dh + jne notminus + fld [camera.tz] + fsub [zoom] + fstp [camera.tz] + jmp show +notminus: + cmp ax,4E2Bh + jne notmaxus + fld [camera.tz] + fadd [zoom] + fstp [camera.tz] + jmp show +notmaxus: + call [cs:identity],offset mat1 + jmp rool +show: + call [cs:transform],offset vertexp,offset mat1 + call [cs:transform],offset vertexnbp,offset mat1 +notmodify: + call [cs:clearscreen] + call [cs:print],offset objectp + call [cs:draw3d_line],3,offset facenbp,offset vertexnbp,offset screen,offset camera,3 + call [cs:draw3d_line],3,offset facenbp,offset vertexnbp2,offset screen,offset camera,3 + cmp [mode],0 + jne line + call [cs:draw3d_point],offset vertexp,offset screen,offset camera,4 + jmp retrace +line: + cmp [mode],1 + jne hidden + call [cs:draw3d_line],3,offset facep,offset vertexp,offset screen,offset camera,4 + jmp retrace +hidden: + call [cs:draw3d_hidden],3,offset facep,offset vertexp,offset screen,offset camera,4 +retrace: + call [cs:waitretrace] + call [cs:waitretrace] + jmp rool +endee: + call [cs:restorestate] + retf + +errorloading: + push cs + pop ds + call [cs:print],offset errorload + call [cs:bioswaitkey] + jmp endee + +errorload db '\c02Erreur au chargement du fichier 3D\l\c07',0 + +filename find <"SPHERE.3DS",0,0,0,1,> + + +importing +use 3D.LIB,draw3d_point +use 3D.LIB,draw3d_line +use 3D.LIB,draw3d_hidden +use 3D.LIB,draw3d_hidden_fill +use 3D.LIB,load3ds +use 3D.LIB,translate +use 3D.LIB,translatex +use 3D.LIB,translatey +use 3D.LIB,translatez +use 3D.LIB,scale +use 3D.LIB,rescale +use 3D.LIB,copy +use 3D.LIB,fill +use 3D.LIB,identity +use 3D.LIB,rotationx +use 3D.LIB,rotationy +use 3D.LIB,rotationz +use 3D.LIB,rotation +use 3D.LIB,project +use 3D.LIB,transform +use 3D.LIB,multiply +use VIDEO,savestate +use VIDEO,clearscreen +use VIDEO,setvideomode +use VIDEO,restorestate +use VIDEO,waitretrace +use SYSTEME,bioswaitkey +use SYSTEME,mbfind +use SYSTEME,mballoc +use VIDEO.LIB,print +use DISQUE,projfile +endi