begin process at 2012 05 24 02:44:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

dlls

 > DLL-FONCTIONS 3D

DLL-FONCTIONS 3D


 Information sur la source

Note :
Aucune note
Catégorie :dlls Niveau :Débutant Date de création :30/01/2004 Date de mise à jour :05/02/2004 12:22:43 Vu / téléchargé :5 583 / 310

Auteur : quoi

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

comp: masm32.
Animation 3D cet exemple contient 2 version VB et ASM
pour comparer la vitesse.

Source

  • .386
  • .model flat,stdcall
  • include \masm32\include\gdi32.inc
  • include \masm32\include\user32.inc
  • include data.inc
  • includelib \masm32\lib\gdi32.lib
  • includelib \masm32\lib\user32.lib
  • .data
  • Trgle dd 6 dup(?) ;triangle
  • ZL dd 500 dup(?) ;tableau reçevant valeur Z chaque triangle
  • OF dd 500 dup(?) ;tableau reçevant offs debut chaque triangle
  • ZFValue dd ?
  • CSCRNX dd 266.0
  • CSCRNY dd 171.0
  • PX dd 1024.0
  • PZ dd 256.0
  • ZERO dd 0
  • TROIS dd 3.0
  • nFV dd 0 ;nombre de triangle devant être dessinés
  • rct dd 4 dup(?) ;reçois dimenssion zone client
  • hBrush dd ? ;pinceau zone client
  • .code
  • DLLMain proc p1,p2,p3
  • push ebp
  • mov ebp, esp
  • mov eax, 1
  • leave
  • ret 12
  • DLLMain endp
  • ;remplis le vtx buffer en ce basant sur les données du data.inc
  • MVTXB proc export vtx:PTR
  • push edi
  • mov ecx,48
  • mov ebx,Offset vtxb
  • mov edx,Offset Face
  • mov edi,vtx
  • boucle:
  • mov eax,[edx]
  • shl eax,5
  • add eax,ebx
  • mov esi,eax
  • push ecx
  • mov ecx,8
  • rep movsd
  • add edx,4
  • pop ecx
  • loop boucle
  • pop edi
  • ret
  • MVTXB endp
  • ;routine principale
  • Project proc export vtx:PTR,v2:PTR,nFace:DWORD
  • ;--------------------------remet à zero nFV(nbr face à dessiner)
  • mov edx,Offset nFV
  • xor eax,eax
  • mov dword ptr[edx],eax
  • ;--------------------------
  • ;---------------------------vide le tableau v2
  • mov eax,nFace
  • mov ebx,3
  • mul ebx
  • mov ecx,eax
  • mov eax,v2
  • xor edx,edx
  • CLEARBUFF2D:
  • mov dword ptr[eax],edx
  • add eax,4
  • loop CLEARBUFF2D
  • ;------------------------------
  • ;-----------------------------Initialise tableau OF
  • ;on stocke l'adresse du debut de chaque triangle,
  • ;ce tableau va être trié par MakeOF en fonction des
  • ;des valeurs contenu dans ZL.
  • mov eax,v2
  • push eax
  • mov ecx,nFace
  • push ecx
  • call InitOF
  • ;-----------------------------
  • ;------------------------------Transforme 3D en 2D
  • ;chaque fois qu'un triangle 2D est creé SortFV est appellé
  • ;pour savoir si il est caché ou si il doit être dessiné
  • ;si dessiné nFV est incrementé, la valeur Z du triangle est
  • ;stockée dans tableau ZL ces valeurs vont être utilisées
  • ;par MakeOF pour definir l'ordre dans lequel les triangles
  • ;doivent être dessinés.
  • pop ecx
  • mov ebx,vtx
  • nextFace:
  • xor eax,eax
  • mov edx,3
  • nextVtx:
  • fld dword ptr [ebx]
  • fmul PX
  • fld dword ptr [ebx+8]
  • fadd PZ
  • fdivp st(1),st(0)
  • fadd CSCRNX
  • fistp dword ptr [Trgle+eax] ;x
  • fld dword ptr [ebx+4]
  • fchs
  • fmul PX
  • fld dword ptr [ebx+8]
  • fadd PZ
  • fdivp st(1),st(0)
  • fadd CSCRNY
  • fistp dword ptr [Trgle+eax+4] ;y
  • add ebx,32
  • add eax,8
  • dec edx
  • jnz nextVtx
  • call ZFace
  • mov edx,Offset nFV
  • pop eax
  • call SortFV
  • push eax
  • loop nextFace
  • call MakeOF
  • ret
  • Project endp
  • ZFace proc
  • fld dword ptr[ebx-88]
  • fadd dword ptr[ebx-56]
  • fadd dword ptr[ebx-24]
  • fdiv TROIS
  • fstp dword ptr[ZFValue]
  • ret
  • ZFace endp
  • SortFV proc
  • fld dword ptr [Trgle+8]
  • fsub dword ptr [Trgle]
  • fld dword ptr [Trgle+20]
  • fsub dword ptr [Trgle+4]
  • fmulp st(1), st(0)
  • fld dword ptr [Trgle+12]
  • fsub dword ptr [Trgle+4]
  • fld dword ptr [Trgle+16]
  • fsub dword ptr [Trgle]
  • fmulp st(1), st(0)
  • fsubp st(1), st(0)
  • fcomp ZERO
  • push eax
  • fstsw ax
  • and ah,01000001b
  • jnz NEXT
  • pop eax
  • call MFace
  • push eax
  • mov eax,[edx]
  • push ebx
  • mov ebx,ZFValue
  • mov dword ptr [ZL+eax*4],ebx
  • pop ebx
  • inc eax
  • mov dword ptr [edx],eax
  • pop eax
  • ret
  • NEXT:
  • pop eax
  • ret
  • SortFV endp
  • MFace proc
  • push edi
  • push ecx
  • mov esi,Offset Trgle
  • mov edi,eax
  • mov ecx,6
  • rep movsd
  • add eax,24
  • pop ecx
  • pop edi
  • ret
  • MFace endp
  • MakeOF proc
  • mov ecx,nFV
  • dec ecx
  • OUTER:
  • xor edx,edx
  • INNER:
  • fld dword ptr [ZL+edx*4]
  • fcomp dword ptr [ZL+edx*4+4]
  • fstsw ax
  • and ah,01000001b
  • jnz NEXT
  • mov eax,[ZL+edx*4]
  • xchg eax,[ZL+edx*4+4]
  • mov dword ptr [ZL+edx*4],eax
  • mov eax,[OF+edx*4]
  • xchg eax,[OF+edx*4+4]
  • mov dword ptr [OF+edx*4],eax
  • NEXT:
  • inc edx
  • cmp edx,ecx
  • jne INNER
  • loop OUTER
  • ret
  • MakeOF endp
  • InitOF proc
  • xor ebx,ebx
  • boucle:
  • mov dword ptr [OF+ebx*4],eax
  • add eax,24
  • inc ebx
  • loop boucle
  • ret
  • InitOF endp
  • DrawFace proc export hwnd:DWORD,hDC:DWORD,v2:PTR
  • ;----------------------------------- redessine le fond
  • invoke GetClientRect, hwnd,ADDR rct
  • mov eax,00BFBFBFh
  • invoke CreateSolidBrush, eax
  • mov hBrush,eax
  • invoke FillRect,hDC,ADDR rct,hBrush
  • ;------------------------------------
  • mov ebx,v2
  • mov ecx,nFV
  • DRAW:
  • push ecx
  • dec ecx
  • mov ebx,[OF+ecx*4]
  • invoke Polygon ,hDC,ebx,3
  • pop ecx
  • loop DRAW
  • invoke InvalidateRect, hwnd,0,0
  • invoke DeleteObject, hBrush
  • ret
  • DrawFace endp
  • ;//////////////////////////////////////////////////////////////////////////////////////
  • ;FONCTIONS DE TRANSFORMATION DE VERTEX
  • ;-----------------------------------------------------------------------------RVTXLX
  • ;definition:Modifie les elements d'un tableau de vertex de
  • ; sorte qu 'ils fassent une rotation sur l'axe X.
  • ;declaration de la fonction dll dans un module VB :
  • ;declare public sub RVTXLX lib "dll"(ByVal angle as single, _
  • ; vtx as D3DVERTEX,ByVal nCount as Long)
  • RVTXLX proc export Angle:DWORD,vtx:PTR,nCount:DWORD
  • LOCAL qSin:DWORD
  • LOCAL qCos:DWORD
  • LOCAL qY:DWORD
  • LOCAL qNy:DWORD
  • fld Angle
  • fsincos
  • fstp qCos
  • fstp qSin
  • mov edx,vtx
  • mov ecx,nCount
  • NextElement:
  • ;-----------------------------------------------yz
  • fld qCos
  • fmul dword ptr [edx+4]
  • fld qSin
  • fmul dword ptr [edx+8]
  • fsubp st(1), st(0)
  • fstp qY
  • fld qSin
  • fmul dword ptr [edx+4]
  • fld qCos
  • fmul dword ptr [edx+8]
  • faddp st(1), st(0)
  • fstp dword ptr[edx+8]
  • ;-------------------------------------------------nynz
  • fld qCos
  • fmul dword ptr [edx+16]
  • fld qSin
  • fmul dword ptr [edx+20]
  • fsubp st(1), st(0)
  • fstp qNy
  • fld qSin
  • fmul dword ptr [edx+16]
  • fld qCos
  • fmul dword ptr [edx+20]
  • faddp st(1), st(0)
  • fstp dword ptr[edx+20]
  • ;-------------------------------------------------
  • mov ebx,qY
  • mov dword ptr[edx+4],ebx
  • mov ebx,qNy
  • mov dword ptr[edx+16],ebx
  • add edx,32
  • loop NextElement
  • ret
  • RVTXLX endp
  • ;-----------------------------------------------------------------------------RVTXLY
  • ;definition:Modifie les elements d'un tableau de vertex de
  • ; sorte qu 'ils fassent une rotation sur l'axe Y.
  • ;declaration de la fonction dll dans un module VB :
  • ;declare public sub RVTXLY lib "dll"(ByVal angle as single, _
  • ; vtx as D3DVERTEX,ByVal nCount as Long)
  • RVTXLY proc export Angle:DWORD,vtx:PTR,nCount:DWORD
  • LOCAL qX:DWORD
  • LOCAL qNx:DWORD
  • LOCAL qSin:DWORD
  • LOCAL qCos:DWORD
  • fld Angle
  • fsincos
  • fstp qCos
  • fstp qSin
  • mov edx,vtx
  • mov ecx,nCount
  • NextElement:
  • ;-----------------------------------------------xz
  • fld qCos
  • fmul dword ptr [edx]
  • fld qSin
  • fmul dword ptr [edx+8]
  • fsubp st(1), st(0)
  • fstp qX
  • fld qSin
  • fmul dword ptr [edx]
  • fld qCos
  • fmul dword ptr [edx+8]
  • faddp st(1), st(0)
  • fstp dword ptr[edx+8]
  • ;-------------------------------------------------nxnz
  • fld qCos
  • fmul dword ptr [edx+12]
  • fld qSin
  • fmul dword ptr [edx+20]
  • fsubp st(1), st(0)
  • fstp qNx
  • fld qSin
  • fmul dword ptr [edx+12]
  • fld qCos
  • fmul dword ptr [edx+20]
  • faddp st(1), st(0)
  • fstp dword ptr[edx+20]
  • ;-------------------------------------------------
  • mov ebx,qX
  • mov dword ptr[edx],ebx
  • mov ebx,qNx
  • mov dword ptr[edx+12],ebx
  • add edx,32
  • loop NextElement
  • ret
  • RVTXLY endp
  • ;-----------------------------------------------------------------------------RVTXLZ
  • ;definition:Modifie les elements d'un tableau de vertex de
  • ; sorte qu 'ils fassent une rotation sur l'axe Z.
  • ;declaration de la fonction dll dans un module VB :
  • ;declare public sub RVTXLZ lib "dll"(ByVal angle as single, _
  • ; vtx as D3DVERTEX,ByVal nCount as Long)
  • RVTXLZ proc export
  • push ebp
  • mov ebp,esp
  • sub esp,16
  • fld dword ptr [ebp+8]
  • fsincos
  • fstp dword ptr[ebp-16]
  • fstp dword ptr[ebp-12]
  • mov edx,[ebp+12]
  • mov ecx,[ebp+16]
  • NextElement:
  • ;-----------------------------------------------xy
  • fld dword ptr[ebp-16]
  • fmul dword ptr [edx]
  • fld dword ptr[ebp-12]
  • fmul dword ptr [edx+4]
  • fsubp st(1), st(0)
  • fstp dword ptr[ebp-8]
  • fld dword ptr[ebp-12]
  • fmul dword ptr [edx]
  • fld dword ptr[ebp-16]
  • fmul dword ptr [edx+4]
  • faddp st(1), st(0)
  • fstp dword ptr [edx+4]
  • ;-------------------------------------------------nxny
  • fld dword ptr[ebp-16]
  • fmul dword ptr [edx+12]
  • fld dword ptr[ebp-12]
  • fmul dword ptr [edx+16]
  • fsubp st(1), st(0)
  • fstp dword ptr[ebp-4]
  • fld dword ptr[ebp-12]
  • fmul dword ptr [edx+12]
  • fld dword ptr [ebp-16]
  • fmul dword ptr [edx+16]
  • faddp st(1), st(0)
  • fstp dword ptr[edx+16]
  • mov ebx,[ebp-8]
  • mov dword ptr[edx],ebx
  • mov ebx,[ebp-4]
  • mov dword ptr[edx+12],ebx
  • add edx,32
  • loop NextElement
  • mov esp,ebp
  • pop ebp
  • ret 12
  • RVTXLZ endp
  • end DLLMain
.386
.model          flat,stdcall
include     \masm32\include\gdi32.inc
include     \masm32\include\user32.inc
include     data.inc


includelib  \masm32\lib\gdi32.lib
includelib  \masm32\lib\user32.lib


.data
  
    Trgle       dd     6 dup(?)             ;triangle                      
    ZL          dd     500 dup(?)           ;tableau reçevant valeur Z chaque triangle
    OF          dd     500 dup(?)           ;tableau reçevant offs debut chaque triangle
    ZFValue     dd     ?
    CSCRNX      dd     266.0    
    CSCRNY      dd     171.0
    PX          dd     1024.0
    PZ          dd     256.0
    ZERO        dd     0
    TROIS       dd     3.0
    nFV         dd     0                   ;nombre de triangle devant être dessinés
    rct         dd     4 dup(?)            ;reçois dimenssion zone client
    hBrush      dd     ?                   ;pinceau zone client
.code
DLLMain proc p1,p2,p3
                                                                                                                                                       
                        push                ebp
                        mov                 ebp, esp
                        mov                 eax, 1
                        leave
                        ret                 12
                        
DLLMain     endp
;remplis le vtx buffer en ce basant sur les données du data.inc 
MVTXB proc export vtx:PTR
        push                 edi
        mov                  ecx,48
        mov                  ebx,Offset vtxb
        mov                  edx,Offset Face
        mov                  edi,vtx
boucle:
        mov                  eax,[edx]
        shl                  eax,5
        add                  eax,ebx
        mov                  esi,eax
        push                 ecx
        mov                  ecx,8
        rep                  movsd
        add                  edx,4
        pop                  ecx
 loop   boucle
        pop                  edi
        ret
MVTXB endp
;routine principale
Project proc export vtx:PTR,v2:PTR,nFace:DWORD 

        ;--------------------------remet à zero nFV(nbr face à dessiner) 
        mov                  edx,Offset nFV
        xor                  eax,eax
        mov                  dword ptr[edx],eax 
        ;--------------------------
                      
        ;---------------------------vide le tableau v2                               
        mov                  eax,nFace
        mov                  ebx,3
        mul                  ebx
        mov                  ecx,eax
        mov                  eax,v2
        xor                  edx,edx

CLEARBUFF2D:
                       
        mov                  dword ptr[eax],edx
        add                  eax,4
        loop                 CLEARBUFF2D        
        ;------------------------------

        ;-----------------------------Initialise tableau OF
        ;on stocke l'adresse du debut de chaque triangle,
        ;ce tableau va être trié par MakeOF en fonction des
        ;des valeurs contenu dans ZL.
        mov                  eax,v2
        push                 eax
        mov                  ecx,nFace
        push                 ecx
        call                 InitOF
        ;----------------------------- 

        ;------------------------------Transforme 3D en 2D
        ;chaque fois qu'un triangle 2D est creé SortFV est appellé
        ;pour savoir si il est caché ou si il doit être dessiné
        ;si dessiné nFV est incrementé, la valeur Z du triangle est
        ;stockée dans tableau ZL ces valeurs vont être utilisées
        ;par MakeOF pour definir l'ordre dans lequel les triangles
        ;doivent être dessinés.  

                       
        pop                    ecx
        mov                    ebx,vtx
                       
                       
nextFace:
        xor                    eax,eax
        mov                    edx,3
nextVtx:
                       
        fld                    dword ptr [ebx]
        fmul                   PX
        fld                    dword ptr [ebx+8]
        fadd                   PZ
        fdivp                  st(1),st(0)
        fadd                   CSCRNX    
        fistp                  dword ptr [Trgle+eax]      ;x
        fld                    dword ptr [ebx+4]
        fchs
        fmul                   PX
        fld                    dword ptr [ebx+8]
        fadd                   PZ
        fdivp                  st(1),st(0)
        fadd                   CSCRNY  
        fistp                  dword ptr [Trgle+eax+4]     ;y

        add                    ebx,32
        add                    eax,8
        dec                    edx 
        jnz                    nextVtx
        call                   ZFace
        mov                    edx,Offset nFV
        pop                    eax
        call                   SortFV
        push                   eax
        loop                   nextFace
        call                   MakeOF
        ret           
            
Project endp
ZFace proc
        fld                    dword ptr[ebx-88]
        fadd                   dword ptr[ebx-56]
        fadd                   dword ptr[ebx-24]
        fdiv                   TROIS
        fstp                   dword ptr[ZFValue]
        ret
ZFace endp
SortFV proc 
        fld                    dword ptr [Trgle+8]
        fsub                   dword ptr [Trgle]
        fld                    dword ptr [Trgle+20]
        fsub                   dword ptr [Trgle+4]
        fmulp                  st(1), st(0)
        fld                    dword ptr [Trgle+12]
        fsub                   dword ptr [Trgle+4]
        fld                    dword ptr [Trgle+16]
        fsub                   dword ptr [Trgle]
        fmulp                  st(1), st(0)
        fsubp                  st(1), st(0)
        fcomp                  ZERO
        push                   eax
        fstsw                  ax
        and                    ah,01000001b
        jnz                    NEXT
        pop                    eax
        call                   MFace
        push                   eax
        mov                    eax,[edx]
        push                   ebx
        mov                    ebx,ZFValue
        mov                    dword ptr [ZL+eax*4],ebx
        pop                    ebx   
        inc                    eax
        mov                    dword ptr [edx],eax
        pop                    eax
        ret
NEXT:
        pop                    eax
        ret           

SortFV endp 
MFace proc
        push                   edi
        push                   ecx
        mov                    esi,Offset Trgle
        mov                    edi,eax
        mov                    ecx,6
        rep                    movsd
        add                    eax,24
        pop                    ecx
        pop                    edi
        ret          
MFace endp

MakeOF proc 
        mov                    ecx,nFV
        dec                    ecx
OUTER:  
        xor                    edx,edx
INNER:
        fld                    dword ptr [ZL+edx*4]
        fcomp                  dword ptr [ZL+edx*4+4]
        fstsw                  ax
        and                    ah,01000001b
        jnz                    NEXT
        mov                    eax,[ZL+edx*4]
        xchg                   eax,[ZL+edx*4+4]
        mov                    dword ptr [ZL+edx*4],eax
        mov                    eax,[OF+edx*4]
        xchg                   eax,[OF+edx*4+4]
        mov                    dword ptr [OF+edx*4],eax
NEXT: 
        inc                    edx
        cmp                    edx,ecx
        jne                    INNER
        loop                   OUTER
        ret
MakeOF endp
InitOF proc
        xor                    ebx,ebx
 boucle:
        mov                    dword ptr [OF+ebx*4],eax
        add                    eax,24
        inc                    ebx
        loop                   boucle
        ret 
InitOF endp

DrawFace proc export   hwnd:DWORD,hDC:DWORD,v2:PTR
        ;----------------------------------- redessine le fond
        invoke	            GetClientRect, hwnd,ADDR rct     
        mov	                  eax,00BFBFBFh
        invoke	            CreateSolidBrush, eax
        mov                   hBrush,eax
        invoke	            FillRect,hDC,ADDR rct,hBrush
        ;------------------------------------
        mov                   ebx,v2
        mov                   ecx,nFV
DRAW:
        push                  ecx
        dec                   ecx
        mov                   ebx,[OF+ecx*4]
        invoke                Polygon ,hDC,ebx,3
        pop                   ecx
        loop                  DRAW
        invoke                InvalidateRect, hwnd,0,0   
        invoke                DeleteObject, hBrush
        ret          
                                
DrawFace endp
;//////////////////////////////////////////////////////////////////////////////////////
;FONCTIONS DE TRANSFORMATION DE VERTEX
;-----------------------------------------------------------------------------RVTXLX
;definition:Modifie les elements d'un tableau de vertex de 
;           sorte qu 'ils fassent une rotation sur l'axe X.
;declaration de la fonction dll dans un module VB :
;declare public sub RVTXLX lib "dll"(ByVal angle as single, _
;                                   vtx as D3DVERTEX,ByVal nCount as Long)

RVTXLX proc export Angle:DWORD,vtx:PTR,nCount:DWORD

    LOCAL   qSin:DWORD
    LOCAL   qCos:DWORD
    LOCAL   qY:DWORD
    LOCAL   qNy:DWORD

        fld                  Angle
        fsincos
        fstp                 qCos                            
        fstp                 qSin                          
        mov                  edx,vtx
        mov                  ecx,nCount
NextElement:
        ;-----------------------------------------------yz      
        fld                  qCos
        fmul                 dword ptr [edx+4]
        fld                  qSin
        fmul                 dword ptr [edx+8]
        fsubp                st(1), st(0)
        fstp                 qY
        fld                  qSin
        fmul                 dword ptr [edx+4]
        fld                  qCos
        fmul                 dword ptr [edx+8]
        faddp                st(1), st(0)
        fstp                 dword ptr[edx+8]
      ;-------------------------------------------------nynz         
        fld                  qCos
        fmul                 dword ptr [edx+16]
        fld                  qSin
        fmul                 dword ptr [edx+20]
        fsubp                st(1), st(0)
        fstp                 qNy
        fld                  qSin
        fmul                 dword ptr [edx+16]
        fld                  qCos
        fmul                 dword ptr [edx+20]
        faddp                st(1), st(0)
        fstp                 dword ptr[edx+20]
     ;-------------------------------------------------
        mov                  ebx,qY
        mov                  dword ptr[edx+4],ebx
        mov                  ebx,qNy
        mov                  dword ptr[edx+16],ebx
        add                  edx,32
        loop                 NextElement
        ret        
RVTXLX endp

;-----------------------------------------------------------------------------RVTXLY
;definition:Modifie les elements d'un tableau de vertex de 
;           sorte qu 'ils fassent une rotation sur l'axe Y.
;declaration de la fonction dll dans un module VB :
;declare public sub RVTXLY lib "dll"(ByVal angle as single, _
;                                   vtx as D3DVERTEX,ByVal nCount as Long)

RVTXLY proc export Angle:DWORD,vtx:PTR,nCount:DWORD

    LOCAL qX:DWORD
    LOCAL qNx:DWORD
    LOCAL qSin:DWORD
    LOCAL qCos:DWORD
    
        fld                  Angle
        fsincos
        fstp                 qCos                            
        fstp                 qSin                          
        mov                  edx,vtx
        mov                  ecx,nCount
NextElement:
        ;-----------------------------------------------xz      
        fld                  qCos
        fmul                 dword ptr [edx]
        fld                  qSin
        fmul                 dword ptr [edx+8]
        fsubp                st(1), st(0)
        fstp                 qX
        fld                  qSin
        fmul                 dword ptr [edx]
        fld                  qCos       
        fmul                 dword ptr [edx+8]
        faddp                st(1), st(0)
        fstp                 dword ptr[edx+8]
      ;-------------------------------------------------nxnz         
        fld                  qCos
        fmul                 dword ptr [edx+12]
        fld                  qSin
        fmul                 dword ptr [edx+20]
        fsubp                st(1), st(0)
        fstp                 qNx
        fld                  qSin
        fmul                 dword ptr [edx+12]
        fld                  qCos
        fmul                 dword ptr [edx+20]
        faddp                st(1), st(0)
        fstp                 dword ptr[edx+20]
     ;-------------------------------------------------
        mov                  ebx,qX
        mov                  dword ptr[edx],ebx
        mov                  ebx,qNx
        mov                  dword ptr[edx+12],ebx
        add                  edx,32 
        loop                 NextElement
        ret        
RVTXLY endp
;-----------------------------------------------------------------------------RVTXLZ
;definition:Modifie les elements d'un tableau de vertex de 
;           sorte qu 'ils fassent une rotation sur l'axe Z.
;declaration de la fonction dll dans un module VB :
;declare public sub RVTXLZ lib "dll"(ByVal angle as single, _
;                                   vtx as D3DVERTEX,ByVal nCount as Long)

RVTXLZ proc export 
        push                 ebp
        mov                  ebp,esp
        sub                  esp,16 
        fld                  dword ptr [ebp+8]
        fsincos
        fstp                 dword ptr[ebp-16]                            
        fstp                 dword ptr[ebp-12]                          
        mov                  edx,[ebp+12]             
        mov                  ecx,[ebp+16]
NextElement:
        ;-----------------------------------------------xy      
        fld                  dword ptr[ebp-16]                              
        fmul                 dword ptr [edx]
        fld                  dword ptr[ebp-12]     
        fmul                 dword ptr [edx+4]
        fsubp                st(1), st(0)
        fstp                 dword ptr[ebp-8]
        fld                  dword ptr[ebp-12]       
        fmul                 dword ptr [edx]
        fld                  dword ptr[ebp-16]      
        fmul                 dword ptr [edx+4]
        faddp                st(1), st(0)
        fstp                 dword ptr [edx+4]                  
       ;-------------------------------------------------nxny         
        fld                  dword ptr[ebp-16]                       
        fmul                 dword ptr [edx+12]
        fld                  dword ptr[ebp-12]                      
        fmul                 dword ptr [edx+16]
        fsubp                st(1), st(0)
        fstp                 dword ptr[ebp-4]
        fld                  dword ptr[ebp-12]       
        fmul                 dword ptr [edx+12]
        fld                  dword ptr [ebp-16]      
        fmul                 dword ptr [edx+16]
        faddp                st(1), st(0)
        fstp                 dword ptr[edx+16]                     
        mov                  ebx,[ebp-8]
        mov                  dword ptr[edx],ebx                     
        mov                  ebx,[ebp-4]
        mov                  dword ptr[edx+12],ebx                 
        add                  edx,32 
        loop                 NextElement
        mov                  esp,ebp
        pop                  ebp       
        ret                  12
RVTXLZ endp


end		DLLMain


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip TEXTURE AVEC DIRECTX9
Source avec Zip FLOATTOHEX CODE DE BRUNEWS RETRENSCRIS EN ASM PAR MOI
Source avec Zip Source avec une capture PATCH TOUT EXE 32BITS POUR Y INSERER UNE IMAGE (GIF ,JPG,BMP...
Source avec Zip SPLASH SCREEN
Source avec Zip EXTRACTICONES

 Sources de la même categorie

Source avec Zip Source avec une capture DLL ALGORYTHME DE RECHERCHE DE CHEMIN EN A STAR, A*, FASM par Devnix
Source avec Zip DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE par Nasman
Source avec Zip DLL MASM32 ET DARKBASIC PRO par Apinew
Source avec Zip DLL AVEC NASM ET ALINK par ibroman
Source avec Zip OBTENIR LE CPUID DE SON PROCESSEUR (DLL) par sibi12

Commentaires et avis

Commentaire de Stormy le 30/01/2004 22:22:07

Elle est cool ta source, mais je pense que tu devrais la zipper kan même. A l'écran c'est pas très clair de primes abords ++

Commentaire de BlackWizzard le 12/02/2004 12:51:07 administrateur CS

c genial!!!!!!!!!!!!!!!!!!!!
g fait le meme genre de moteur en Action Script 2.0 (flashMX2004), et il y a plus de ligne que dans ton code asm! 8|
serieux, je trouve ça super!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,810 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales