collide.h
上传用户:qccn516
上传日期:2013-05-02
资源大小:3382k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /* Collide
  2.  *
  3.  * Copyright (C) 2003-2004, Alexander Zaprjagaev <frustum@frustum.org>
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #ifndef __COLLIDE_H__
  20. #define __COLLIDE_H__
  21. #include "mathlib.h"
  22. #include "bsp.h"
  23. #include "position.h"
  24. class Object;
  25. class Collide {
  26. public:
  27. Collide();
  28. ~Collide();
  29. int collide(Object *object,const vec3 &pos,float radius);
  30. int collide(Object *object,const Position &pos,float radius);
  31. int collide(Object *object);
  32. void sort();
  33. enum {
  34. NUM_CONTACTS = 32,
  35. NUM_OBJECTS = 16,
  36. };
  37. struct Contact {
  38. Object *object;
  39. Material *material;
  40. vec3 point;
  41. vec3 normal;
  42. float depth;
  43. };
  44. int num_contacts;
  45. Contact *contacts;
  46. int num_objects;
  47. Object **objects;
  48. protected:
  49. int addContact(Object *object,Material *material,const vec3 &point,const vec3 &normal,float depth,int min_depth = 0);
  50. void collideObjectSphere(Object *object,const vec3 &pos,float radius);
  51. void collideObjectMesh(Object *object);
  52. enum {
  53. NUM_TRIANGLES = 1024,
  54. NUM_SURFACES = 16,
  55. };
  56. struct Triangle {
  57. vec3 v[3]; // vertexes
  58. vec4 plane; // plane
  59. vec4 c[3]; // fast point in triangle
  60. };
  61. struct Surface {
  62. int num_triangles; // triangles
  63. Triangle *triangles;
  64. vec3 center; // bound sphere
  65. float radius;
  66. vec3 min; // bound box
  67. vec3 max;
  68. };
  69. static int counter;
  70. static Position position;
  71. static int num_surfaces;
  72. static Surface *surfaces;
  73. };
  74. #endif /* __COLLIDE_H__ */