EntityCollision.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "core/EntityCollision.h"
  2. #include <OgreHardwareBufferManager.h>
  3. EntityCollision::EntityCollision()
  4. {
  5. mRenderOp.vertexData = new Ogre::VertexData();
  6. mRenderOp.indexData = 0;
  7. mRenderOp.vertexData->vertexCount = 74;
  8. mRenderOp.vertexData->vertexStart = 0;
  9. mRenderOp.operationType = Ogre::RenderOperation::OT_LINE_LIST;
  10. mRenderOp.useIndexes = false;
  11. Ogre::VertexDeclaration* decl = mRenderOp.vertexData->vertexDeclaration;
  12. Ogre::VertexBufferBinding* bind = mRenderOp.vertexData->vertexBufferBinding;
  13. decl->addElement( 0, 0, Ogre::VET_FLOAT3, Ogre::VES_POSITION );
  14. Ogre::HardwareVertexBufferSharedPtr vbuf0 = Ogre::HardwareBufferManager::getSingleton().createVertexBuffer(
  15. decl->getVertexSize( 0 ),
  16. mRenderOp.vertexData->vertexCount,
  17. Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY );
  18. bind->setBinding( 0, vbuf0 );
  19. float* pPos = static_cast< float* >( vbuf0->lock( Ogre::HardwareBuffer::HBL_DISCARD ) );
  20. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  21. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  22. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  23. *pPos++ = -0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  24. *pPos++ = -0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  25. *pPos++ = -0.9f; *pPos++ = 0.5f; *pPos++ = 1.0f;
  26. *pPos++ = -0.9f; *pPos++ = 0.5f; *pPos++ = 1.0f;
  27. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  28. *pPos++ = -0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  29. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  30. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  31. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  32. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  33. *pPos++ = -0.9f; *pPos++ = 0.5f;*pPos++ = 1.0f;
  34. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  35. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 0.0f;
  36. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 0.0f;
  37. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 1.0f;
  38. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 1.0f;
  39. *pPos++ = -0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  40. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 0.0f;
  41. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  42. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  43. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  44. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  45. *pPos++ = 0.0f; *pPos++ = 1.0f; *pPos++ = 1.0f;
  46. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 0.0f;
  47. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  48. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  49. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 1.0f;
  50. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 1.0f;
  51. *pPos++ = 0.5f; *pPos++ = 0.9f; *pPos++ = 1.0f;
  52. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 0.0f;
  53. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  54. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  55. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  56. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  57. *pPos++ = 0.9f; *pPos++ = 0.5f; *pPos++ = 1.0f;
  58. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  59. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  60. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  61. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  62. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  63. *pPos++ = -1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  64. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  65. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  66. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  67. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  68. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  69. *pPos++ = -0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  70. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  71. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 0.0f;
  72. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 0.0f;
  73. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 1.0f;
  74. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 1.0f;
  75. *pPos++ = -0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  76. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 0.0f;
  77. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  78. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  79. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  80. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  81. *pPos++ = 0.0f; *pPos++ = -1.0f; *pPos++ = 1.0f;
  82. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 0.0f;
  83. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  84. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  85. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  86. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  87. *pPos++ = 0.5f; *pPos++ = -0.9f; *pPos++ = 1.0f;
  88. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 0.0f;
  89. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  90. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 0.0f;
  91. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  92. *pPos++ = 1.0f; *pPos++ = 0.0f; *pPos++ = 1.0f;
  93. *pPos++ = 0.9f; *pPos++ = -0.5f; *pPos++ = 1.0f;
  94. vbuf0->unlock();
  95. Ogre::AxisAlignedBox aabb;
  96. aabb.setInfinite();
  97. setBoundingBox( aabb );
  98. }
  99. EntityCollision::~EntityCollision()
  100. {
  101. delete mRenderOp.vertexData;
  102. }
  103. Ogre::Real
  104. EntityCollision::getSquaredViewDepth( const Ogre::Camera* cam ) const
  105. {
  106. return 0.0f;
  107. }
  108. Ogre::Real
  109. EntityCollision::getBoundingRadius() const
  110. {
  111. return 0.0f;
  112. }