Accueil > > > TEXTURE AVEC DIRECTX9
TEXTURE AVEC DIRECTX9
Information sur la source
Description
Un dé texturé faisant une rotation sur les trois axes. utilisation d'objects com ce trouvant dans d3d9.inc(réecris en asm) macro pérmettant une utilisation aisée des fonctions directX LoadTexture qui permet de charger une texture *.gif,jpeg qui ce trouve dans la resource.
Source
- .586
- .model flat, stdcall
- option casemap:none
-
- include windows.inc
- include kernel32.inc
- include user32.inc
- include winmm.inc
- include ole32.inc
- include oleaut32.inc
- include gdi32.inc
- include IPicture.inc
- include d3d9.inc
-
-
- includelib kernel32
- includelib user32.lib
- includelib winmm.lib
- includelib ole32.lib
- includelib oleaut32.lib
- includelib gdi32.lib
- includelib d3d9.lib
-
-
-
- INIT PROTO :DWORD
- MsgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
- InitDlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
- PerCent PROTO :DWORD,:DWORD
- InitD3D PROTO :DWORD,:DWORD
- LoadTexture PROTO :DWORD,:DWORD
- CreateCylinder PROTO :DWORD,:DWORD, :DWORD
- SetupMatrices PROTO
- SetupLights PROTO
- Cleanup PROTO
- Render PROTO
- InitGeometry PROTO
- ThreadP PROTO
- MatrixRotationY PROTO :PTR,:FLOAT
- MatrixLookAtLH PROTO :PTR,:PTR,:PTR,:PTR
- MatrixPerspectiveFovLH PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- CUSTOMVERTEX STRUCT
- pos D3DVECTOR <>
- n D3DVECTOR <>
- col DWORD ?
- tu REAL4 ?
- tv REAL4 ?
- CUSTOMVERTEX ENDS
- D3DFVF_CUSTOMVERTEX equ D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_DIFFUSE or D3DFVF_TEX1
-
- .DATA
- align 16
- matWorld D3DXMATRIXA16 <>
- matView D3DXMATRIXA16 <>
- matProj D3DXMATRIXA16 <>
- d3ddm D3DDISPLAYMODE<>
- ppvIDirect3D9 dd 0
- ppvIDirect3DDevice9 dd 0
- pVtxBCube dd 0
- pVtxBCylinder dd 0
- ppvIDirect3DTexture9 dd 0
- pVertices dd 0
- start_time dd 0
- elapse_time dd 20
- lpThreadId dd 0
- Hwnd dd 0
- cx_screen dd 0
- cy_screen dd 0
- View_Mode dd 0
- FovLHParam2 dd 0
-
- .CODE
- include D3XMATH.ASM
- START: INVOKE DialogBoxParam,400000h,100,0, ADDR InitDlgProc,0
- INVOKE INIT,50
- INVOKE Cleanup
- INVOKE ExitProcess,0
-
- ;################################################# INITIALISATION ##############################################
-
- INIT PROC size_percent:DWORD
- LOCAL msg:MSG
- LOCAL width_hwnd,height_hwnd
- INVOKE CreateDialogParam,400000h,101,0,0,0
- mov Hwnd,eax
- INVOKE LoadIcon,400000h,200
- INVOKE SendMessage,Hwnd,WM_SETICON,0,eax
- INVOKE GetSystemMetrics,SM_CXSCREEN
- mov cx_screen,eax
- INVOKE GetSystemMetrics,SM_CYSCREEN
- mov cy_screen,eax
- fild cy_screen
- fidiv cx_screen
- fstp FovLHParam2
- mov edi,cx_screen
- mov eax,edi
- shr edi,1
- INVOKE PerCent,eax,size_percent
- mov edx,eax
- shr eax,1
- sub edi,eax
- mov esi,cy_screen
- mov eax,esi
- shr esi,1
- INVOKE PerCent,eax,size_percent
- mov ecx,eax
- shr eax,1
- sub esi,eax
- INVOKE SetWindowPos,Hwnd,0,edi,esi,edx,ecx,0
- INVOKE InitD3D,Hwnd,View_Mode
- INVOKE InitGeometry
- INVOKE ShowWindow,Hwnd, SW_SHOWNORMAL
- INVOKE UpdateWindow,Hwnd
- INVOKE timeGetTime
- add eax,elapse_time
- mov start_time,eax
- INVOKE CreateThread,0,0,ADDR ThreadP,0,0,addr lpThreadId
- L_0: INVOKE GetMessage,ADDR msg,0,0,0
- mov eax,msg.message
- cmp eax,WM_COMMAND
- je L_1
- cmp eax,WM_KEYDOWN
- jne L_2
- cmp msg.wParam,VK_ESCAPE
- je L_1
- L_2: INVOKE TranslateMessage, ADDR msg
- INVOKE DispatchMessage, ADDR msg
- jmp L_0
- L_1: ret
- INIT ENDP
-
- ;##################################################### INITIALISATION DU DEVICE 3D #######################################
-
- InitD3D PROC hWnd:DWORD, Full_Scr:DWORD
- LOCAL d3dpp:D3DPRESENT_PARAMETERS
- INVOKE RtlZeroMemory,addr d3dpp,D3DPRESENT_PARAMETERS
- INVOKE Direct3DCreate9,D3D_SDK_VERSION
- mov ppvIDirect3D9,eax
- IDirect3D9 GetAdapterDisplayMode,D3DADAPTER_DEFAULT,ADDR d3ddm
- mov eax,Full_Scr
- not eax
- and eax,1
- mov d3dpp.Windowed,eax
- mov d3dpp.SwapEffect,D3DSWAPEFFECT_DISCARD
- or eax,eax
- jne @F
- push d3ddm.Format
- push d3ddm.Width1
- push d3ddm.Height
- pop d3dpp.BackBufferHeight
- pop d3dpp.BackBufferWidth
- pop d3dpp.BackBufferFormat
- INVOKE ShowCursor,0
- @@: IDirect3D9 CreateDevice,D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hWnd,\
- D3DCREATE_SOFTWARE_VERTEXPROCESSING,addr d3dpp, addr ppvIDirect3DDevice9
- IDirect3DDevice9 SetRenderState,D3DRS_CULLMODE,D3DCULL_CCW
- IDirect3DDevice9 SetRenderState, D3DRS_ZENABLE, TRUE
- ret
- InitD3D endp
-
- ;#################################################### THREAD PROC ################################################################
-
- ThreadP PROC
- @@: INVOKE Render
- jmp @B
- ret
- ThreadP ENDP
-
- ;############################################### INITGEOMETRY #####################################################################
-
- InitGeometry PROC
- .CONST
- ;FRONT
- Vertices REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.0r
- REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.0r, 0.333r
- REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.0r, 0.333r
- REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.0r, 0.0r
- REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r, 0.0r
- ;RIGHT
- REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.0r
- REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.0r
- REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.0r
- ;BACK
- REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.0r
- REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.333r
- REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.0r
- REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.0r
- ;DOWN
- REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.0r,0.666r
- REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.0r,0.333r
- REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.666r
- REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.0r,0.666r
- ;LEFT
- REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.666r
- REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.333r
- REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.666r
- REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.333r,0.666r
- ;UP
- REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.666r
- REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.333r
- REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.333r
- REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.666r
- REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
- DD 00FFFFFFh
- REAL4 0.666r,0.666r
- REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
- DD 00FFFFFFh
- REAL4 0.999r,0.333r
- size_vert equ $ - offset Vertices
- .CODE
- INVOKE LoadTexture,400,addr ppvIDirect3DTexture9
- IDirect3DDevice9 CreateVertexBuffer,size_vert,0, D3DFVF_CUSTOMVERTEX ,D3DPOOL_DEFAULT,addr pVtxBCube, NULL
- IDirect3DVertexBuffer9 pVtxBCube,Lock1,0,size_vert,addr pVertices,0
- mov ecx,size_vert
- lea esi,Vertices
- mov edi,pVertices
- rep movsb
- IDirect3DVertexBuffer9 pVtxBCube,Unlock
- INVOKE CreateCylinder,20,60,60
- ret
- InitGeometry ENDP
- ;######################################################### RENDER ############################################################
- Render PROC
- IDirect3DDevice9 Clear,0, NULL,D3DCLEAR_TARGET,000000FFh,3F800000h,0
- IDirect3DDevice9 BeginScene
- INVOKE SetupLights
- INVOKE SetupMatrices
- IDirect3DDevice9 SetFVF,D3DFVF_CUSTOMVERTEX
- IDirect3DDevice9 SetTexture, 0, ppvIDirect3DTexture9
- IDirect3DDevice9 SetSamplerState,0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC
- IDirect3DDevice9 SetStreamSource,0,pVtxBCylinder, 0, sizeof CUSTOMVERTEX
- IDirect3DDevice9 DrawPrimitive,D3DPT_TRIANGLELIST,0,40
- IDirect3DDevice9 SetStreamSource,0,pVtxBCube, 0, sizeof CUSTOMVERTEX
- IDirect3DDevice9 DrawPrimitive,D3DPT_TRIANGLELIST,0,12
- IDirect3DDevice9 EndScene
- IDirect3DDevice9 Present,0,0,0,0
- ret
- Render ENDP
- ;##################################################### SETUPMATRICES ###########################################################
- SetupMatrices PROC
- INVOKE timeGetTime
- cmp eax,start_time
- jc @F
- add eax,elapse_time
- mov start_time,eax
- push 36
- push pVertices
- push 3C8E8A72h ; 1 degré radian
- call RVTXLY
- push 36
- push pVertices
- push 3C8E8A72h
- call RVTXLX
- push 36
- push pVertices
- push 3C8E8A72h
- call RVTXLZ
- @@: lea eax,matWorld
- push eax
- call MatrixIdentity
- IDirect3DDevice9 SetTransform,D3DTS_WORLDMATRIX,ADDR matWorld
- .DATA
- tmpvec31 D3DVECTOR <0.0f, 0.0f,-5.0f>
- tmpvec32 D3DVECTOR <0.0f, 0.0f, 0.0f>
- tmpvec33 D3DVECTOR <0.0f, 1.0f, 0.0f>
- .CODE
- INVOKE MatrixLookAtLH, ADDR matView, ADDR tmpvec31, ADDR tmpvec32, ADDR tmpvec33
- IDirect3DDevice9 SetTransform, D3DTS_VIEW, ADDR matView
- INVOKE MatrixPerspectiveFovLH, ADDR matProj,3F490FDBh,FovLHParam2,3F800000h,43FA0000h
- IDirect3DDevice9 SetTransform, D3DTS_PROJECTION, ADDR matProj
- ret
- SetupMatrices ENDP
- ;################################################################### SetupLights ###############################################
- SetupLights PROC
- LOCAL light:D3DLIGHT9
- INVOKE RtlZeroMemory,ADDR light,sizeof D3DLIGHT9
- mov light.type1,D3DLIGHT_DIRECTIONAL
- fld1
- fst light.Diffuse.r
- fst light.Diffuse.g
- fstp light.Diffuse.b
- .DATA
- vecDir D3DVECTOR <0.5,-0.1,1.0>
- .CODE
- lea edx,light.Direction
- lea eax,vecDir
- push eax
- push edx
- call Normalize
- IDirect3DDevice9 SetLight, 0, ADDR light
- IDirect3DDevice9 LightEnable, 0, TRUE
- IDirect3DDevice9 SetRenderState, D3DRS_LIGHTING, TRUE
- ret
- SetupLights ENDP
-
- ;############################################################ CLEANUP #######################################################
-
- Cleanup PROC
- IDirect3DTexture9 Release
- mov ppvIDirect3DTexture9,0
- IDirect3DVertexBuffer9 pVtxBCube,Release
- mov pVtxBCube,0
- IDirect3DVertexBuffer9 pVtxBCylinder,Release
- mov pVtxBCylinder,0
- IDirect3DDevice9 Release
- mov ppvIDirect3DDevice9,0
- IDirect3D9 Release
- mov ppvIDirect3D9,0
- ret
- Cleanup ENDP
-
- ;########################################################## InitDlgProc #######################################################
-
- InitDlgProc PROC hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
- pushad
- mov eax,uMsg
- cmp eax,WM_INITDIALOG
- je WMINIT
- cmp eax,WM_COMMAND
- je WMCMD
- cmp eax,WM_CLOSE
- je WMCLOSE
- jmp DLG
- WMINIT:
- .DATA
- item0 db 'NONE',0
- item1 db '2X',0
- item2 db '4X',0
- item3 db '8X',0
- .CODE
- INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item0
- INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item1
- INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item2
- INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item3
- INVOKE SendDlgItemMessage,hwnd,300,CB_SETCURSEL ,0,0
- jmp DLG
- WMCMD: mov eax,wParam
- and eax,0FFFFh
- cmp eax,303
- je OK
- cmp eax,304
- jne DLG
- INVOKE ExitProcess,0
- OK: INVOKE GetDlgItem,hwnd,301
- INVOKE SendMessage, eax, BM_GETCHECK, 0, 0
- mov View_Mode,eax
- WMCLOSE:INVOKE EndDialog, hwnd, 0
- DLG: popad
- xor eax, eax
- ret
- InitDlgProc ENDP
-
- ;############################################################### CreateCylinder
-
- CreateCylinder PROC nFace:DWORD,ray:DWORD,h:DWORD
- LOCAL nVrtx,pCylind,pVrtx,angC,heightC
- push 2
- fild h
- fidiv dword ptr [esp]
- fstp heightC
- ;-------------------------------------calcul angle
- push 180
- fild dword ptr [esp]
- fidiv nFace
- push 180
- fidiv dword ptr [esp]
- fldpi
- fmulp st(1),st
- fstp angC
- add esp,12
- ;-------------------------------------cree le buffer
- mov eax,nFace
- shl eax,1
- add eax,2
- mov ecx,CUSTOMVERTEX
- mul ecx
- INVOKE GlobalAlloc,GPTR,eax
- mov pVrtx,eax
- mov edi,pVrtx
- ;-------------------------------------remplis le buffer
- sub ecx,ecx
- mov eax,nFace
- inc eax
- @@: push ecx
- fld angC
- fimul dword ptr [esp]
- fsincos
- fst dword ptr [edi+12] ;p1.nx
- fst dword ptr [edi+48] ;p2.nx
- fchs
- fimul ray
- fst dword ptr [edi] ;p1.x
- fstp dword ptr [edi+36] ;p2.x
- fchs
- fst dword ptr [edi+20] ;p1.nz
- fst dword ptr [edi+56] ;p2.nz
- fchs
- fimul ray
- fst dword ptr [edi+8] ;p1.z
- fstp dword ptr [edi+44] ;p2.z
- fld heightC
- fst dword ptr [edi+40] ;p2.y
- fchs
- fstp dword ptr [edi+4] ;p1.y
- fld1
- fidiv nFace
- fimul dword ptr [esp]
- fst dword ptr [edi+28] ;p1.tu
- fstp dword ptr [edi+64] ;p2.tu
- push 3F2AA64Ch
- fld dword ptr [esp]
- fstp dword ptr [edi+68] ;p1.tv
- fld1
- fstp dword ptr [edi+32] ;p2.tv
- mov dword ptr [edi+24],00FFFFFFh
- mov dword ptr [edi+60],00FFFFFFh
- add edi,72
- add esp,8
- inc ecx
- dec eax
- jnz @B
- mov eax,CUSTOMVERTEX*6
- mov ecx,nFace
- mul ecx
- mov nVrtx,eax
- IDirect3DDevice9 CreateVertexBuffer,nVrtx,0, D3DFVF_CUSTOMVERTEX ,D3DPOOL_DEFAULT,addr pVtxBCylinder, NULL
- IDirect3DVertexBuffer9 pVtxBCylinder,Lock1,0,nVrtx,addr pCylind,0
- mov eax,nFace
- mov esi,pVrtx
- mov edi,pCylind
- @@: mov ecx,CUSTOMVERTEX*4
- rep movsb
- sub esi,CUSTOMVERTEX*2
- mov ecx,CUSTOMVERTEX
- rep movsb
- sub esi,CUSTOMVERTEX*2
- mov ecx,CUSTOMVERTEX
- rep movsb
- dec eax
- jnz @B
- IDirect3DVertexBuffer9 pVtxBCylinder,Unlock
- INVOKE GlobalFree,pVrtx
- ret
- CreateCylinder ENDP
-
- include loadTexture.asm
-
- END START
-
.586
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include winmm.inc
include ole32.inc
include oleaut32.inc
include gdi32.inc
include IPicture.inc
include d3d9.inc
includelib kernel32
includelib user32.lib
includelib winmm.lib
includelib ole32.lib
includelib oleaut32.lib
includelib gdi32.lib
includelib d3d9.lib
INIT PROTO :DWORD
MsgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
InitDlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
PerCent PROTO :DWORD,:DWORD
InitD3D PROTO :DWORD,:DWORD
LoadTexture PROTO :DWORD,:DWORD
CreateCylinder PROTO :DWORD,:DWORD, :DWORD
SetupMatrices PROTO
SetupLights PROTO
Cleanup PROTO
Render PROTO
InitGeometry PROTO
ThreadP PROTO
MatrixRotationY PROTO :PTR,:FLOAT
MatrixLookAtLH PROTO :PTR,:PTR,:PTR,:PTR
MatrixPerspectiveFovLH PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
CUSTOMVERTEX STRUCT
pos D3DVECTOR <>
n D3DVECTOR <>
col DWORD ?
tu REAL4 ?
tv REAL4 ?
CUSTOMVERTEX ENDS
D3DFVF_CUSTOMVERTEX equ D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_DIFFUSE or D3DFVF_TEX1
.DATA
align 16
matWorld D3DXMATRIXA16 <>
matView D3DXMATRIXA16 <>
matProj D3DXMATRIXA16 <>
d3ddm D3DDISPLAYMODE<>
ppvIDirect3D9 dd 0
ppvIDirect3DDevice9 dd 0
pVtxBCube dd 0
pVtxBCylinder dd 0
ppvIDirect3DTexture9 dd 0
pVertices dd 0
start_time dd 0
elapse_time dd 20
lpThreadId dd 0
Hwnd dd 0
cx_screen dd 0
cy_screen dd 0
View_Mode dd 0
FovLHParam2 dd 0
.CODE
include D3XMATH.ASM
START: INVOKE DialogBoxParam,400000h,100,0, ADDR InitDlgProc,0
INVOKE INIT,50
INVOKE Cleanup
INVOKE ExitProcess,0
;################################################# INITIALISATION ##############################################
INIT PROC size_percent:DWORD
LOCAL msg:MSG
LOCAL width_hwnd,height_hwnd
INVOKE CreateDialogParam,400000h,101,0,0,0
mov Hwnd,eax
INVOKE LoadIcon,400000h,200
INVOKE SendMessage,Hwnd,WM_SETICON,0,eax
INVOKE GetSystemMetrics,SM_CXSCREEN
mov cx_screen,eax
INVOKE GetSystemMetrics,SM_CYSCREEN
mov cy_screen,eax
fild cy_screen
fidiv cx_screen
fstp FovLHParam2
mov edi,cx_screen
mov eax,edi
shr edi,1
INVOKE PerCent,eax,size_percent
mov edx,eax
shr eax,1
sub edi,eax
mov esi,cy_screen
mov eax,esi
shr esi,1
INVOKE PerCent,eax,size_percent
mov ecx,eax
shr eax,1
sub esi,eax
INVOKE SetWindowPos,Hwnd,0,edi,esi,edx,ecx,0
INVOKE InitD3D,Hwnd,View_Mode
INVOKE InitGeometry
INVOKE ShowWindow,Hwnd, SW_SHOWNORMAL
INVOKE UpdateWindow,Hwnd
INVOKE timeGetTime
add eax,elapse_time
mov start_time,eax
INVOKE CreateThread,0,0,ADDR ThreadP,0,0,addr lpThreadId
L_0: INVOKE GetMessage,ADDR msg,0,0,0
mov eax,msg.message
cmp eax,WM_COMMAND
je L_1
cmp eax,WM_KEYDOWN
jne L_2
cmp msg.wParam,VK_ESCAPE
je L_1
L_2: INVOKE TranslateMessage, ADDR msg
INVOKE DispatchMessage, ADDR msg
jmp L_0
L_1: ret
INIT ENDP
;##################################################### INITIALISATION DU DEVICE 3D #######################################
InitD3D PROC hWnd:DWORD, Full_Scr:DWORD
LOCAL d3dpp:D3DPRESENT_PARAMETERS
INVOKE RtlZeroMemory,addr d3dpp,D3DPRESENT_PARAMETERS
INVOKE Direct3DCreate9,D3D_SDK_VERSION
mov ppvIDirect3D9,eax
IDirect3D9 GetAdapterDisplayMode,D3DADAPTER_DEFAULT,ADDR d3ddm
mov eax,Full_Scr
not eax
and eax,1
mov d3dpp.Windowed,eax
mov d3dpp.SwapEffect,D3DSWAPEFFECT_DISCARD
or eax,eax
jne @F
push d3ddm.Format
push d3ddm.Width1
push d3ddm.Height
pop d3dpp.BackBufferHeight
pop d3dpp.BackBufferWidth
pop d3dpp.BackBufferFormat
INVOKE ShowCursor,0
@@: IDirect3D9 CreateDevice,D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hWnd,\
D3DCREATE_SOFTWARE_VERTEXPROCESSING,addr d3dpp, addr ppvIDirect3DDevice9
IDirect3DDevice9 SetRenderState,D3DRS_CULLMODE,D3DCULL_CCW
IDirect3DDevice9 SetRenderState, D3DRS_ZENABLE, TRUE
ret
InitD3D endp
;#################################################### THREAD PROC ################################################################
ThreadP PROC
@@: INVOKE Render
jmp @B
ret
ThreadP ENDP
;############################################### INITGEOMETRY #####################################################################
InitGeometry PROC
.CONST
;FRONT
Vertices REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.0r
REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.0r, 0.333r
REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.0r, 0.333r
REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.0r, 0.0r
REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r, 0.0r
;RIGHT
REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.0r
REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.0r
REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.0r
;BACK
REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.999r,0.0r
REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.999r,0.333r
REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.0r
REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.999r,0.0r
;DOWN
REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.0r,0.666r
REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.0r,0.333r
REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 1.0r, -1.0r, -1.0r, 1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 1.0r, -1.0r, 1.0r, 1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.333r,0.666r
REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.0r,0.666r
;LEFT
REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.333r,0.666r
REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.333r,0.333r
REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 -1.0r, -1.0r, -1.0r, -1.0r, -1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.666r,0.666r
REAL4 -1.0r, -1.0r, 1.0r, -1.0r, -1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.333r,0.666r
;UP
REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.666r,0.666r
REAL4 -1.0r, 1.0r, 1.0r, -1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.666r,0.333r
REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.999r,0.333r
REAL4 1.0r, 1.0r, -1.0r, 1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.999r,0.666r
REAL4 -1.0r, 1.0r, -1.0r, -1.0r, 1.0r, -1.0r
DD 00FFFFFFh
REAL4 0.666r,0.666r
REAL4 1.0r, 1.0r, 1.0r, 1.0r, 1.0r, 1.0r
DD 00FFFFFFh
REAL4 0.999r,0.333r
size_vert equ $ - offset Vertices
.CODE
INVOKE LoadTexture,400,addr ppvIDirect3DTexture9
IDirect3DDevice9 CreateVertexBuffer,size_vert,0, D3DFVF_CUSTOMVERTEX ,D3DPOOL_DEFAULT,addr pVtxBCube, NULL
IDirect3DVertexBuffer9 pVtxBCube,Lock1,0,size_vert,addr pVertices,0
mov ecx,size_vert
lea esi,Vertices
mov edi,pVertices
rep movsb
IDirect3DVertexBuffer9 pVtxBCube,Unlock
INVOKE CreateCylinder,20,60,60
ret
InitGeometry ENDP
;######################################################### RENDER ############################################################
Render PROC
IDirect3DDevice9 Clear,0, NULL,D3DCLEAR_TARGET,000000FFh,3F800000h,0
IDirect3DDevice9 BeginScene
INVOKE SetupLights
INVOKE SetupMatrices
IDirect3DDevice9 SetFVF,D3DFVF_CUSTOMVERTEX
IDirect3DDevice9 SetTexture, 0, ppvIDirect3DTexture9
IDirect3DDevice9 SetSamplerState,0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC
IDirect3DDevice9 SetStreamSource,0,pVtxBCylinder, 0, sizeof CUSTOMVERTEX
IDirect3DDevice9 DrawPrimitive,D3DPT_TRIANGLELIST,0,40
IDirect3DDevice9 SetStreamSource,0,pVtxBCube, 0, sizeof CUSTOMVERTEX
IDirect3DDevice9 DrawPrimitive,D3DPT_TRIANGLELIST,0,12
IDirect3DDevice9 EndScene
IDirect3DDevice9 Present,0,0,0,0
ret
Render ENDP
;##################################################### SETUPMATRICES ###########################################################
SetupMatrices PROC
INVOKE timeGetTime
cmp eax,start_time
jc @F
add eax,elapse_time
mov start_time,eax
push 36
push pVertices
push 3C8E8A72h ; 1 degré radian
call RVTXLY
push 36
push pVertices
push 3C8E8A72h
call RVTXLX
push 36
push pVertices
push 3C8E8A72h
call RVTXLZ
@@: lea eax,matWorld
push eax
call MatrixIdentity
IDirect3DDevice9 SetTransform,D3DTS_WORLDMATRIX,ADDR matWorld
.DATA
tmpvec31 D3DVECTOR <0.0f, 0.0f,-5.0f>
tmpvec32 D3DVECTOR <0.0f, 0.0f, 0.0f>
tmpvec33 D3DVECTOR <0.0f, 1.0f, 0.0f>
.CODE
INVOKE MatrixLookAtLH, ADDR matView, ADDR tmpvec31, ADDR tmpvec32, ADDR tmpvec33
IDirect3DDevice9 SetTransform, D3DTS_VIEW, ADDR matView
INVOKE MatrixPerspectiveFovLH, ADDR matProj,3F490FDBh,FovLHParam2,3F800000h,43FA0000h
IDirect3DDevice9 SetTransform, D3DTS_PROJECTION, ADDR matProj
ret
SetupMatrices ENDP
;################################################################### SetupLights ###############################################
SetupLights PROC
LOCAL light:D3DLIGHT9
INVOKE RtlZeroMemory,ADDR light,sizeof D3DLIGHT9
mov light.type1,D3DLIGHT_DIRECTIONAL
fld1
fst light.Diffuse.r
fst light.Diffuse.g
fstp light.Diffuse.b
.DATA
vecDir D3DVECTOR <0.5,-0.1,1.0>
.CODE
lea edx,light.Direction
lea eax,vecDir
push eax
push edx
call Normalize
IDirect3DDevice9 SetLight, 0, ADDR light
IDirect3DDevice9 LightEnable, 0, TRUE
IDirect3DDevice9 SetRenderState, D3DRS_LIGHTING, TRUE
ret
SetupLights ENDP
;############################################################ CLEANUP #######################################################
Cleanup PROC
IDirect3DTexture9 Release
mov ppvIDirect3DTexture9,0
IDirect3DVertexBuffer9 pVtxBCube,Release
mov pVtxBCube,0
IDirect3DVertexBuffer9 pVtxBCylinder,Release
mov pVtxBCylinder,0
IDirect3DDevice9 Release
mov ppvIDirect3DDevice9,0
IDirect3D9 Release
mov ppvIDirect3D9,0
ret
Cleanup ENDP
;########################################################## InitDlgProc #######################################################
InitDlgProc PROC hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
pushad
mov eax,uMsg
cmp eax,WM_INITDIALOG
je WMINIT
cmp eax,WM_COMMAND
je WMCMD
cmp eax,WM_CLOSE
je WMCLOSE
jmp DLG
WMINIT:
.DATA
item0 db 'NONE',0
item1 db '2X',0
item2 db '4X',0
item3 db '8X',0
.CODE
INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item0
INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item1
INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item2
INVOKE SendDlgItemMessage,hwnd,300,CB_ADDSTRING,0,addr item3
INVOKE SendDlgItemMessage,hwnd,300,CB_SETCURSEL ,0,0
jmp DLG
WMCMD: mov eax,wParam
and eax,0FFFFh
cmp eax,303
je OK
cmp eax,304
jne DLG
INVOKE ExitProcess,0
OK: INVOKE GetDlgItem,hwnd,301
INVOKE SendMessage, eax, BM_GETCHECK, 0, 0
mov View_Mode,eax
WMCLOSE:INVOKE EndDialog, hwnd, 0
DLG: popad
xor eax, eax
ret
InitDlgProc ENDP
;############################################################### CreateCylinder
CreateCylinder PROC nFace:DWORD,ray:DWORD,h:DWORD
LOCAL nVrtx,pCylind,pVrtx,angC,heightC
push 2
fild h
fidiv dword ptr [esp]
fstp heightC
;-------------------------------------calcul angle
push 180
fild dword ptr [esp]
fidiv nFace
push 180
fidiv dword ptr [esp]
fldpi
fmulp st(1),st
fstp angC
add esp,12
;-------------------------------------cree le buffer
mov eax,nFace
shl eax,1
add eax,2
mov ecx,CUSTOMVERTEX
mul ecx
INVOKE GlobalAlloc,GPTR,eax
mov pVrtx,eax
mov edi,pVrtx
;-------------------------------------remplis le buffer
sub ecx,ecx
mov eax,nFace
inc eax
@@: push ecx
fld angC
fimul dword ptr [esp]
fsincos
fst dword ptr [edi+12] ;p1.nx
fst dword ptr [edi+48] ;p2.nx
fchs
fimul ray
fst dword ptr [edi] ;p1.x
fstp dword ptr [edi+36] ;p2.x
fchs
fst dword ptr [edi+20] ;p1.nz
fst dword ptr [edi+56] ;p2.nz
fchs
fimul ray
fst dword ptr [edi+8] ;p1.z
fstp dword ptr [edi+44] ;p2.z
fld heightC
fst dword ptr [edi+40] ;p2.y
fchs
fstp dword ptr [edi+4] ;p1.y
fld1
fidiv nFace
fimul dword ptr [esp]
fst dword ptr [edi+28] ;p1.tu
fstp dword ptr [edi+64] ;p2.tu
push 3F2AA64Ch
fld dword ptr [esp]
fstp dword ptr [edi+68] ;p1.tv
fld1
fstp dword ptr [edi+32] ;p2.tv
mov dword ptr [edi+24],00FFFFFFh
mov dword ptr [edi+60],00FFFFFFh
add edi,72
add esp,8
inc ecx
dec eax
jnz @B
mov eax,CUSTOMVERTEX*6
mov ecx,nFace
mul ecx
mov nVrtx,eax
IDirect3DDevice9 CreateVertexBuffer,nVrtx,0, D3DFVF_CUSTOMVERTEX ,D3DPOOL_DEFAULT,addr pVtxBCylinder, NULL
IDirect3DVertexBuffer9 pVtxBCylinder,Lock1,0,nVrtx,addr pCylind,0
mov eax,nFace
mov esi,pVrtx
mov edi,pCylind
@@: mov ecx,CUSTOMVERTEX*4
rep movsb
sub esi,CUSTOMVERTEX*2
mov ecx,CUSTOMVERTEX
rep movsb
sub esi,CUSTOMVERTEX*2
mov ecx,CUSTOMVERTEX
rep movsb
dec eax
jnz @B
IDirect3DVertexBuffer9 pVtxBCylinder,Unlock
INVOKE GlobalFree,pVrtx
ret
CreateCylinder ENDP
include loadTexture.asm
END START
Conclusion
C'est difficile de trouvé des bon exemples directX en assembleur qui fonctionne, c'est difficile aussi de trouver de la bonne doc à part le sdk en anglais. cet exemple n'utilise que d3d9.lib, Je suis casi certain que le pro en dx n'utilisera jamais d3dx3.lib et ses fonctions préfabriquées qui t'imposent les runtimes mcf qui fais que ton prog pèse un tonne de plus en plus tu dois faire une mise à jour de uuid.lib pour compiler,le sdk en anglais propose une fonction D3DX9LoadTextureFromRes inutilisable c'est pour ça que j'ai fais ma propre fonction qui charge l'image qui ce trouve dans la section de resource. Je cherche un example en asm d'un fonction qui charge des mesh (fichier *.x).
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Masm et DIRECTX9 [ par ToutEnMasm ]
Tenté par le sujet ?http://perso.orange.fr/luce.yves/DIRECTX9.htmje me suis vu refuser mes sources du début par le serveur,ou alors j'ai fait une faus
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont RE : PIC 16F84RE : PIC 16F84 par belounis
Cliquez pour lire la suite par belounis RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|