From caf14e77dbdae26c32b482e34468204eeda8cd21 Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Fri, 16 Nov 2018 22:56:12 +1100 Subject: Adding mikkt tangent support to CSG objects --- modules/csg/csg_shape.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'modules/csg/csg_shape.h') diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h index 6898cdaf64..0a4bb5f665 100644 --- a/modules/csg/csg_shape.h +++ b/modules/csg/csg_shape.h @@ -36,6 +36,7 @@ #include "csg.h" #include "scene/3d/visual_instance.h" #include "scene/resources/concave_polygon_shape.h" +#include "thirdparty/misc/mikktspace.h" class CSGShape : public VisualInstance { GDCLASS(CSGShape, VisualInstance); @@ -63,6 +64,8 @@ private: Ref root_collision_shape; RID root_collision_instance; + bool calculate_tangents; + Ref root_mesh; struct Vector3Hasher { @@ -78,14 +81,26 @@ private: PoolVector vertices; PoolVector normals; PoolVector uvs; + PoolVector tans; Ref material; int last_added; PoolVector::Write verticesw; PoolVector::Write normalsw; PoolVector::Write uvsw; + PoolVector::Write tansw; }; + //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); + static void mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, + const tbool bIsOrientationPreserving, const int iFace, const int iVert); + void _update_shape(); protected: @@ -115,6 +130,9 @@ public: void set_snap(float p_snap); float get_snap() const; + void set_calculate_tangents(bool p_calculate_tangents); + bool is_calculating_tangents() const; + bool is_root_shape() const; CSGShape(); ~CSGShape(); -- cgit v1.2.3