home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Muscles_Dr2152735192009.psc / Muscles_2D_Ragdoll_V3.1_DirectX / Mdx8.bas < prev    next >
BASIC Source File  |  2009-05-14  |  7KB  |  206 lines

  1. Attribute VB_Name = "Mdx8"
  2. 'FROM HERE
  3. 'http://www.robydx.altervista.org/main.htm
  4. '(Italian tutorials for directX)
  5.  
  6.  
  7.  
  8. 'parte grafica
  9. Global DX As New DirectX8
  10. Global D3DX As New D3DX8
  11. '////////////////////////////////
  12. '//////PARTE GRAFICA////////////
  13. '//////////////////////////////
  14. Global D3D As Direct3D8 'direct 3d
  15. Global Device As Direct3DDevice8 'spazio in cui si rappresenta
  16. Global dSprite As D3DXSprite 'gestisce gli sprite
  17. Global matWorld As D3DMATRIX 'rappresenta il mondo
  18. Global matView As D3DMATRIX 'rappresenta la camera
  19. Global matProj As D3DMATRIX 'rappresenta come la camera rappresenta il mondo
  20. Global Const rad1 = 3.14159265358979 / 180 'il pi greco
  21. Global D3DWindow As D3DPRESENT_PARAMETERS 'descrive i parametri
  22. Global rFinestra As RECT 'dimensione della finestra
  23.  
  24.  
  25. Global Testo As D3DXFont 'testo
  26.  
  27. Public Declare Function GetTickCount Lib "kernel32" () As Long
  28. Public Declare Function IntersectRect Lib "user32" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
  29. Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, ByRef RECT As RECT) As Long
  30.  
  31.  
  32. Sub creaSchermo(dxWidth As Long, dxHeight As Long, Fhwnd As Long)
  33. 'qui si crea lo schermo
  34. Dim D3DWindow As D3DPRESENT_PARAMETERS 'descrive la vista
  35. Set D3D = DX.Direct3DCreate() 'crea D3d
  36. 'imposto le variabili di creazione dello schermo( lezione uno)
  37. D3DWindow.SwapEffect = D3DSWAPEFFECT_FLIP
  38. D3DWindow.BackBufferCount = 1
  39. D3DWindow.BackBufferFormat = D3DFMT_R5G6B5 'colore
  40. D3DWindow.BackBufferWidth = dxWidth
  41. D3DWindow.BackBufferHeight = dxHeight
  42. D3DWindow.hDeviceWindow = Fhwnd 'proprietα hwnd della finestra rischiesta nel codice
  43. D3DWindow.EnableAutoDepthStencil = 1
  44. D3DWindow.AutoDepthStencilFormat = D3DFMT_D16 '16 bit Z-Buffer
  45.  
  46. 'crea device
  47. Set Device = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Fhwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DWindow)
  48. 'Fino a qui Φ rimasto tutto uguale queste ultime righe di codice sono la novitα
  49.  
  50. 'setta il tipo di vertice
  51. Device.SetVertexShader D3DFVF_VERTEX Or D3DFVF_TEX1
  52.  
  53. 'disattiva la luce
  54. Device.SetRenderState D3DRS_LIGHTING, 0
  55. Device.SetRenderState D3DRS_SHADEMODE, D3DSHADE_GOURAUD
  56. 'attiva lo z buffer
  57. Device.SetRenderState D3DRS_ZENABLE, 1
  58. 'qualitα texture
  59. Device.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
  60. Device.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR
  61. 'crea il controllo 2D
  62. Set dSprite = D3DX.CreateSprite(Device)
  63. ' The World Matrix
  64. D3DXMatrixIdentity matWorld
  65. Device.SetTransform D3DTS_WORLD, matWorld
  66.  
  67. 'The View Matrix
  68. D3DXMatrixLookAtLH matView, MakeVector(0, 0, -30), MakeVector(0, 0, 0), MakeVector(0, 1, 0)
  69. Device.SetTransform D3DTS_VIEW, matView
  70.  
  71. 'The projection Matrix
  72. D3DXMatrixPerspectiveFovLH matProj, 45 * rad1, 1, 1, 1000
  73. Device.SetTransform D3DTS_PROJECTION, matProj
  74.  
  75.  
  76. End Sub
  77. '
  78. Public Sub muoviObj(scalaX As Single, scalaY As Single, scalaZ As Single, angleX As Long, angleY As Long, angleZ As Long, posX As Single, posY As Single, posZ As Single)
  79. Dim CosRx As Single, CosRy As Single, CosRz As Single
  80. Dim SinRx As Single, SinRy As Single, SinRz As Single
  81. Dim mat1 As D3DMATRIX
  82. '
  83. rad = PI / 180
  84. CosRx = Cos(angleX * rad) 'Used 6x
  85. CosRy = Cos(angleY * rad) 'Used 4x
  86. CosRz = Cos(angleZ * rad) 'Used 4x
  87. SinRx = Sin(angleX * rad) 'Used 5x
  88. SinRy = Sin(angleY * rad) 'Used 5x
  89. SinRz = Sin(angleZ * rad) 'Used 5x
  90. With mat1
  91.     
  92.     .m11 = (scalaX * CosRy * CosRz)
  93.     .m12 = (scalaX * CosRy * SinRz)
  94.     .m13 = -(scalaX * SinRy)
  95.     '
  96.     .m21 = -(scalaY * CosRx * SinRz) + (scalaY * SinRx * SinRy * CosRz)
  97.     .m22 = (scalaY * CosRx * CosRz) + (scalaY * SinRx * SinRy * SinRz)
  98.     .m23 = (scalaY * SinRx * CosRy)
  99.     '
  100.     .m31 = (scalaZ * SinRx * SinRz) + (scalaZ * CosRx * SinRy * CosRz)
  101.     .m32 = -(scalaZ * SinRx * CosRz) + (scalaZ * CosRx * SinRy * SinRz)
  102.     .m33 = (scalaZ * CosRx * CosRy)
  103.     '
  104.     .m41 = posX
  105.     .m42 = posY
  106.     .m43 = posZ
  107.     .m44 = 1#
  108. End With
  109. Device.SetTransform D3DTS_WORLD, mat1
  110. End Sub
  111.  
  112. 'crea il vettore
  113. Function MakeVector(x As Single, y As Single, Z As Single) As D3DVECTOR
  114. MakeVector.x = x
  115. MakeVector.y = y
  116. MakeVector.Z = Z
  117. End Function
  118.  
  119.  
  120.  
  121. 'crea il vertice
  122. Function CreaD3Dv(x As Single, y As Single, Z As Single, nx As Single, ny As Single, nz As Single, tu As Single, tv As Single) As D3DVERTEX
  123. CreaD3Dv.x = x
  124. CreaD3Dv.y = y
  125. CreaD3Dv.Z = Z
  126. CreaD3Dv.tu = tu
  127. CreaD3Dv.tv = tv
  128. CreaD3Dv.nx = nx
  129. CreaD3Dv.ny = ny
  130. CreaD3Dv.nz = nz
  131. End Function
  132.  
  133. Function creaTex(filesrc As String, ColorKey As Long, Optional coloreK As Boolean = False) As Direct3DTexture8
  134. If coloreK Then
  135.     Set creaTex = D3DX.CreateTextureFromFileEx(Device, filesrc, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_POINT, ColorKey, ByVal 0, ByVal 0)
  136. Else
  137.     Set creaTex = D3DX.CreateTextureFromFile(Device, filesrc)
  138. End If
  139. End Function
  140.  
  141. Sub termina(Optional spegni As Boolean = True)
  142. Set DX = Nothing
  143. Set D3D = Nothing
  144. Set Device = Nothing
  145. Set dSprite = Nothing
  146.  
  147. If spegni Then End
  148. End Sub
  149.  
  150. Sub creaSchermo2(dxWidth As Long, dxHeight As Long, dxBpp As CONST_D3DFORMAT, Fhwnd As Long, finestra As Boolean, numBackBuffer As Long, Optional debugMode As Boolean)
  151. Dim DispMode As D3DDISPLAYMODE 'descrive il display
  152. '
  153. Set D3D = DX.Direct3DCreate() 'crea D3d
  154. 'ottiene il presente stato
  155. D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode
  156. 'dimensione finestra
  157. GetWindowRect Fhwnd, rFinestra
  158. 'crea tutto
  159. If finestra Then
  160.     'inizializza finestra
  161.     D3DWindow.Windowed = 1
  162.     D3DWindow.BackBufferCount = 1 '1 backbuffer
  163.     D3DWindow.BackBufferFormat = DispMode.Format 'colore
  164. Else
  165.     'inizializza schermo pieno
  166.     D3DWindow.BackBufferCount = numBackBuffer ' backbuffer
  167.     D3DWindow.BackBufferFormat = dxBpp 'colore
  168.     D3DWindow.BackBufferWidth = dxWidth
  169.     D3DWindow.BackBufferHeight = dxHeight
  170. End If
  171. 'comuni
  172. D3DWindow.SwapEffect = D3DSWAPEFFECT_DISCARD
  173. D3DWindow.EnableAutoDepthStencil = 1
  174. D3DWindow.AutoDepthStencilFormat = D3DFMT_D16 '16 bit Z-Buffer
  175. D3DWindow.hDeviceWindow = Fhwnd 'target
  176. D3DWindow.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES
  177. If debugMode Then D3DWindow.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE
  178. 'crea device
  179. Set Device = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Fhwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DWindow)
  180.  
  181. Set dSprite = D3DX.CreateSprite(Device)
  182.  
  183. End Sub
  184.  
  185.  
  186. 'crea un tipo di testo
  187. Function creaFont(f As StdFont) As D3DXFont
  188. Dim iT As IFont
  189. Set iT = f
  190. Set creaFont = D3DX.CreateFont(Device, iT.hFont)
  191. End Function
  192.  
  193.  
  194.  
  195. 'Private Sub DrawSprite(ByRef SPR As tSprite)
  196. 'With SPR
  197. '.DrawScala = vMUL(.Scala, wZOOM.x)
  198. '.DrawCenter = vMUL(.TexCenter, .DrawScala.x) ')
  199. '.DrawPos = vADD(vMUL(vSUB(.POS, .TexCenter), .DrawScala.x), CS)
  200. '.DrawPos = vADD(.DrawPos, vMUL(wPAN, -wZOOM.x))
  201. 'dSprite.DRAW .Tex, ByVal 0, .DrawScala, .DrawCenter, -.Ang, .DrawPos, MyColor
  202. 'End With
  203. 'End Sub
  204.  
  205.  
  206.