home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Graphics / sKulpt / skulpt-src / Objects-D3D.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-07-27  |  3.0 KB  |  142 lines

  1. #define STRICT
  2.  
  3. // Includes standard Windows
  4. #include <windows.h>
  5. #include <windowsx.h>
  6. #include <time.h>
  7. #include <stdlib.h>
  8. #include <malloc.h>
  9. #include <memory.h>
  10. #include <stdio.h>
  11.  
  12. // Includes D3D
  13. #define  D3D_OVERLOADS
  14. #include <ddraw.h>
  15. #include <d3d.h>
  16.  
  17. // Includes utilitaires D3D
  18. #include "d3dmath.h"
  19. #include "d3dutil.h"
  20. #include "D3DEnum.h"
  21. #include <d3dx.h>
  22.  
  23. // Ids Resources
  24. #include "resource.h"
  25.  
  26. // Constantes
  27. #include "const.h"
  28.  
  29. // Types
  30. #include "types.h"
  31.  
  32. // Variables globales projet
  33. #include "vars.h"
  34.  
  35. // Prototypes fonctions autres modules
  36. #include "proto.h"
  37.  
  38. // Macros
  39. #include "macros.h"
  40.  
  41. //************************************* C O M M U N S ***********************
  42. void vDeleteD3DObjects(void)
  43. {
  44.     // RAZ Objets D3D
  45.     for (int iObject = 0 ; iObject < XDC_NUMOBJECTS ; iObject++)
  46.     {
  47.         if (!Objects[iObject].bEnabled) continue;
  48.         
  49. //          Objects[iObject].pShape -> Release();
  50.         Objects[iObject].bEnabled = FALSE;
  51.         Objects[iObject].bHidden = FALSE;
  52.     }
  53.     iObjtFirstAvailable = 0;
  54.     iObjtLastUsed = -1;
  55. }
  56.  
  57. int iMakeD3DObj(void)
  58. {
  59.     int iCnt;
  60.  
  61.     // Rechercher un slot libre
  62.     for (iCnt = iObjtFirstAvailable ; (iCnt <= iObjtLastUsed) && (Objects [iCnt].bEnabled == TRUE) ; iCnt++);
  63.  
  64.     // Si pas trouvé alors fail
  65.     if (iCnt >= XDC_NUMOBJECTS)
  66.     {
  67.         vTrace("*** E0023 : Plus de slots objets libres");
  68.         return -1;
  69.     }
  70.  
  71.     // Créer l'objet
  72.     Objects[iCnt].vOrigin = D3DVECTOR(0.f, 0.f, 0.f);
  73.     Objects[iCnt].bEnabled = TRUE;
  74.     Objects[iCnt].bHidden = FALSE;
  75.     Objects[iCnt].bSelected = FALSE;
  76.  
  77.     while (Objects[iObjtFirstAvailable].bEnabled == TRUE) iObjtFirstAvailable++;
  78.     if (iObjtLastUsed < iCnt) iObjtLastUsed = iCnt;
  79.     
  80.     return iCnt;
  81. }
  82.  
  83. int iFindD3DObject(D3DVECTOR p, int iPrevious)
  84. {
  85.     int iCnt;
  86.     float fTolerance = (float) fabs(fXmax - fXmin) / XDC_ZONE;
  87.     
  88.     // Rechercher 
  89.     for (iCnt = max(iPrevious + 1, 0) ;
  90.             (iCnt <= iObjtLastUsed)
  91.          && (!(   (Objects[iCnt].bEnabled == TRUE)
  92.                && (Objects[iCnt].bHidden == FALSE)
  93.                && (fabs(Objects[iCnt].vOrigin.x - p.x) < fTolerance)
  94.                && (fabs(Objects[iCnt].vOrigin.y - p.y) < fTolerance)
  95.                && (fabs(Objects[iCnt].vOrigin.z - p.z) < fTolerance)
  96.               ))
  97.          ;
  98.          iCnt++) ;
  99.  
  100.     // Si trouvé alors renvoyer son indice
  101.     if (iCnt <= iObjtLastUsed)
  102.         return(iCnt);
  103.  
  104.     // Sinon renvoyer -1
  105.     return -1;
  106. }
  107.  
  108. BOOL bMoveD3DObj(int iObject, D3DVECTOR vPos)
  109. {
  110. /*
  111.     if (Objects[iObject].bEnabled == FALSE) return FALSE;
  112.  
  113.     LPDIRECT3DVERTEXBUFFER7 vBuf = Objects[iObject].pShape -> GetVB();
  114.     D3DVERTEXBUFFERDESC vbDesc;
  115.  
  116.     vbDesc.dwSize = sizeof(vbDesc);
  117.     vBuf -> GetVertexBufferDesc(&vbDesc);
  118.  
  119.     if (vbDesc.dwFVF != D3DFVF_VERTEX) return FALSE;
  120.  
  121.     D3DVERTEX *vbAddr;
  122.     unsigned long iSize;
  123.  
  124.     vBuf -> Lock(DDLOCK_SURFACEMEMORYPTR, (void **) &vbAddr, &iSize);
  125.  
  126.     for (unsigned iVertex = 0 ; iVertex < vbDesc.dwNumVertices ; iVertex++)
  127.     {
  128.         vbAddr[iVertex].x += vPos.x;
  129.         vbAddr[iVertex].y += vPos.y;
  130.         vbAddr[iVertex].z += vPos.z;
  131.     }
  132.  
  133.     vBuf -> Unlock();
  134.  
  135.     vBuf -> Release();
  136.  
  137.     Objects[iObject].vOrigin += vPos;
  138. */
  139.     return TRUE;
  140. }
  141.  
  142.