Files
BlitzNext/Runtime/blitz3d/meshcollider.hpp
T

50 lines
1.0 KiB
C++
Raw Normal View History

2014-01-31 08:23:00 +13:00
#ifndef MESHCOLLIDER_H
#define MESHCOLLIDER_H
2019-01-18 15:55:06 +01:00
#include "collision.hpp"
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
class MeshCollider {
public:
struct Vertex {
2014-01-31 08:23:00 +13:00
Vector coords;
};
2019-01-18 17:04:17 +01:00
struct Triangle {
void* surface;
int verts[3], index;
2014-01-31 08:23:00 +13:00
};
2019-01-18 17:04:17 +01:00
MeshCollider(const vector<Vertex>& verts, const vector<Triangle>& tris);
2014-01-31 08:23:00 +13:00
~MeshCollider();
//sphere collision
2019-01-18 17:04:17 +01:00
bool collide(const Line& line, float radius, Collision* curr_coll, const Transform& tform);
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
bool intersects(const MeshCollider& c, const Transform& t) const;
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
private:
vector<Vertex> vertices;
2014-01-31 08:23:00 +13:00
vector<Triangle> triangles;
2019-01-18 17:04:17 +01:00
struct Node {
Box box;
Node * left, *right;
2014-01-31 08:23:00 +13:00
vector<int> triangles;
2019-01-18 17:04:17 +01:00
Node() : left(0), right(0) {}
~Node()
{
delete left;
delete right;
}
2014-01-31 08:23:00 +13:00
};
2019-01-18 17:04:17 +01:00
Node* tree;
2014-01-31 08:23:00 +13:00
vector<Node*> leaves;
2019-01-18 17:04:17 +01:00
Box nodeBox(const vector<int>& tris);
Node* createLeaf(const vector<int>& tris);
Node* createNode(const vector<int>& tris);
bool collide(const Box& box, const Line& line, float radius, const Transform& tform, Collision* curr_coll,
Node* node);
2014-01-31 08:23:00 +13:00
};
#endif