diff options
Diffstat (limited to 'scene/resources/surface_tool.h')
| -rw-r--r-- | scene/resources/surface_tool.h | 87 |
1 files changed, 41 insertions, 46 deletions
diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h index f859efbfe..542c21e7b 100644 --- a/scene/resources/surface_tool.h +++ b/scene/resources/surface_tool.h @@ -29,34 +29,32 @@ #ifndef SURFACE_TOOL_H #define SURFACE_TOOL_H -#include "scene/resources/mesh.h" #include "mikktspace.h" - +#include "scene/resources/mesh.h" class SurfaceTool : public Reference { - GDCLASS(SurfaceTool, Reference ); + GDCLASS(SurfaceTool, Reference); + public: struct Vertex { - Vector3 vertex; - Color color; - Vector3 normal; // normal, binormal, tangent - Vector3 binormal; - Vector3 tangent; - Vector2 uv; - Vector2 uv2; - Vector<int> bones; - Vector<float> weights; + Vector3 vertex; + Color color; + Vector3 normal; // normal, binormal, tangent + Vector3 binormal; + Vector3 tangent; + Vector2 uv; + Vector2 uv2; + Vector<int> bones; + Vector<float> weights; - bool operator==(const Vertex& p_vertex) const; + bool operator==(const Vertex &p_vertex) const; - Vertex() { } + Vertex() {} }; - private: - struct VertexHasher { static _FORCE_INLINE_ uint32_t hash(const Vertex &p_vtx); }; @@ -67,9 +65,9 @@ private: int format; Ref<Material> material; //arrays - List< Vertex > vertex_array; - List< int > index_array; - Map<int,bool> smooth_groups; + List<Vertex> vertex_array; + List<int> index_array; + Map<int, bool> smooth_groups; //memory Color last_color; @@ -80,57 +78,54 @@ private: Vector<float> last_weights; Plane last_tangent; - void _create_list(const Ref<Mesh>& p_existing, int p_surface, List<Vertex> *r_vertex, List<int> *r_index,int &lformat); - + void _create_list(const Ref<Mesh> &p_existing, int p_surface, List<Vertex> *r_vertex, List<int> *r_index, int &lformat); //mikktspace callbacks - static int mikktGetNumFaces(const SMikkTSpaceContext * pContext); - static int mikktGetNumVerticesOfFace(const SMikkTSpaceContext * pContext, const int iFace); - static void mikktGetPosition(const SMikkTSpaceContext * pContext, float fvPosOut[], const int iFace, const int iVert); - static void mikktGetNormal(const SMikkTSpaceContext * pContext, float fvNormOut[], const int iFace, const int iVert); - static void mikktGetTexCoord(const SMikkTSpaceContext * pContext, float fvTexcOut[], const int iFace, const int iVert); - static void mikktSetTSpaceBasic(const SMikkTSpaceContext * pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); -protected: + static int mikktGetNumFaces(const SMikkTSpaceContext *pContext); + static int mikktGetNumVerticesOfFace(const SMikkTSpaceContext *pContext, const int iFace); + static void mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert); + static void mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert); + static void mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert); + static void mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); +protected: static void _bind_methods(); public: - void begin(Mesh::PrimitiveType p_primitive); - void add_vertex( const Vector3& p_vertex); - void add_color( Color p_color ); - void add_normal( const Vector3& p_normal); - void add_tangent( const Plane& p_tangent ); - void add_uv( const Vector2& p_uv); - void add_uv2( const Vector2& p_uv); - void add_bones( const Vector<int>& p_indices); - void add_weights( const Vector<float>& p_weights); + void add_vertex(const Vector3 &p_vertex); + void add_color(Color p_color); + void add_normal(const Vector3 &p_normal); + void add_tangent(const Plane &p_tangent); + void add_uv(const Vector2 &p_uv); + void add_uv2(const Vector2 &p_uv); + void add_bones(const Vector<int> &p_indices); + void add_weights(const Vector<float> &p_weights); void add_smooth_group(bool p_smooth); - void add_triangle_fan( const Vector<Vector3>& p_vertexes, const Vector<Vector2>& p_uvs=Vector<Vector2>(), const Vector<Color>& p_colors=Vector<Color>(), const Vector<Vector2>& p_uv2s=Vector<Vector2>(), const Vector<Vector3>& p_normals=Vector<Vector3>(), const Vector<Plane>& p_tangents=Vector<Plane>() ); + void add_triangle_fan(const Vector<Vector3> &p_vertexes, const Vector<Vector2> &p_uvs = Vector<Vector2>(), const Vector<Color> &p_colors = Vector<Color>(), const Vector<Vector2> &p_uv2s = Vector<Vector2>(), const Vector<Vector3> &p_normals = Vector<Vector3>(), const Vector<Plane> &p_tangents = Vector<Plane>()); - void add_index( int p_index); + void add_index(int p_index); void index(); void deindex(); void generate_normals(); void generate_tangents(); - void add_to_format(int p_flags) { format|=p_flags; } + void add_to_format(int p_flags) { format |= p_flags; } - void set_material(const Ref<Material>& p_material); + void set_material(const Ref<Material> &p_material); void clear(); - List< Vertex > &get_vertex_array() { return vertex_array; } + List<Vertex> &get_vertex_array() { return vertex_array; } - void create_from(const Ref<Mesh>& p_existing, int p_surface); - void append_from(const Ref<Mesh>& p_existing, int p_surface,const Transform& p_xform); - Ref<Mesh> commit(const Ref<Mesh>& p_existing=Ref<Mesh>()); + void create_from(const Ref<Mesh> &p_existing, int p_surface); + void append_from(const Ref<Mesh> &p_existing, int p_surface, const Transform &p_xform); + Ref<Mesh> commit(const Ref<Mesh> &p_existing = Ref<Mesh>()); SurfaceTool(); }; - #endif |
