You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Expose TriangleMesh api functions wrapped for scripting
Adds script wrapped TriangleMesh api functions to create and query the triangle BVH tree.
This commit is contained in:
@@ -40,9 +40,12 @@ public:
|
||||
struct Triangle {
|
||||
Vector3 normal;
|
||||
int indices[3];
|
||||
int32_t surface_index;
|
||||
int32_t surface_index = 0;
|
||||
};
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Vector<Triangle> triangles;
|
||||
Vector<Vector3> vertices;
|
||||
@@ -50,10 +53,10 @@ private:
|
||||
struct BVH {
|
||||
AABB aabb;
|
||||
Vector3 center; //used for sorting
|
||||
int left;
|
||||
int right;
|
||||
int left = -1;
|
||||
int right = -1;
|
||||
|
||||
int face_index;
|
||||
int32_t face_index = -1;
|
||||
};
|
||||
|
||||
struct BVHCmpX {
|
||||
@@ -76,13 +79,13 @@ private:
|
||||
int _create_bvh(BVH *p_bvh, BVH **p_bb, int p_from, int p_size, int p_depth, int &max_depth, int &max_alloc);
|
||||
|
||||
Vector<BVH> bvh;
|
||||
int max_depth;
|
||||
bool valid;
|
||||
int max_depth = 0;
|
||||
bool valid = false;
|
||||
|
||||
public:
|
||||
bool is_valid() const;
|
||||
bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const;
|
||||
bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const;
|
||||
bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr, int32_t *r_face_index = nullptr) const;
|
||||
bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr, int32_t *r_face_index = nullptr) const;
|
||||
bool inside_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count, Vector3 p_scale = Vector3(1, 1, 1)) const;
|
||||
Vector<Face3> get_faces() const;
|
||||
|
||||
@@ -91,5 +94,13 @@ public:
|
||||
void get_indices(Vector<int> *r_triangles_indices) const;
|
||||
|
||||
void create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices = Vector<int32_t>());
|
||||
|
||||
// Wrapped functions for compatibility with method bindings
|
||||
// and user exposed script api that can't use more native types.
|
||||
bool create_from_faces(const Vector<Vector3> &p_faces);
|
||||
Dictionary intersect_segment_scriptwrap(const Vector3 &p_begin, const Vector3 &p_end) const;
|
||||
Dictionary intersect_ray_scriptwrap(const Vector3 &p_begin, const Vector3 &p_dir) const;
|
||||
Vector<Vector3> get_faces_scriptwrap() const;
|
||||
|
||||
TriangleMesh();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user