Guest User

Untitled

a guest
Jun 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1.  
  2. //! Align an Entity, so the X axis is pointing along
  3. //! the global direction x,y,z.
  4. //! The up vector will be the Y axis.
  5. // \param entity - entity to align
  6. // \param x,y,z - direction to align
  7. // \param glob - global alignment (ignore parent rotation)
  8. FUNCTION EntityAlignVector%: entity%, x,y,z, glob%=FALSE
  9. LOCAL m[]
  10. LOCAL d
  11.  
  12. ASSERT EntityIsValid(entity)
  13. m[] = g3DObj[entity].M[]
  14.  
  15. d = x*x + y*y + z*z
  16. // must normalize before?
  17. IF ABS(d-1.0) > 0.01
  18. IF ABS(d)<0.0000001
  19. x=1
  20. y=0
  21. z=0
  22. ELSE
  23. d = 1.0 / SQR(d)
  24. x=x*d
  25. y=y*d
  26. z=z*d
  27. ENDIF
  28. ENDIF
  29.  
  30. d=z
  31.  
  32. // X
  33. m[ 0]=z
  34. m[ 1]=0
  35. m[ 2]=-x
  36.  
  37. // Z
  38. m[8]=x
  39. m[9]=y
  40. m[10]=z
  41.  
  42. // Y = ZxX
  43. m[4] = m[ 9]*m[2] - m[10]*m[1]
  44. m[5] = m[10]*m[0] - m[ 8]*m[2]
  45. m[6] = m[ 8]*m[1] - m[ 9]*m[0]
  46.  
  47. IF glob AND g3DObj[entity].parent>=0
  48. LOCAL pm[]
  49. EntityInverseMatrix(g3DObj[EntityGetParent(entity)].Mg[], pm[])
  50. LOCAL x,y,z
  51. x=m[12]
  52. y=m[13]
  53. z=m[14]
  54. EntityMultMatrix4x4(g3DObj[entity].M[], pm[], m[])
  55. g3DObj[entity].M[12]=x
  56. g3DObj[entity].M[13]=y
  57. g3DObj[entity].M[14]=z
  58.  
  59. ELSE
  60. g3DObj[entity].M[] = m[]
  61. ENDIF
  62. EntityUpdateMatrix(g3DObj[entity])
  63. ENDFUNCTION
Add Comment
Please, Sign In to add comment