diff --git a/doc/BlenderGizmo/Move.png b/doc/BlenderGizmo/Move.png new file mode 100644 index 00000000..e5b071b6 Binary files /dev/null and b/doc/BlenderGizmo/Move.png differ diff --git a/doc/BlenderGizmo/Rotate.png b/doc/BlenderGizmo/Rotate.png new file mode 100644 index 00000000..32c953b9 Binary files /dev/null and b/doc/BlenderGizmo/Rotate.png differ diff --git a/doc/BlenderGizmo/Scale.png b/doc/BlenderGizmo/Scale.png new file mode 100644 index 00000000..ca32178a Binary files /dev/null and b/doc/BlenderGizmo/Scale.png differ diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index 6a5bb1e8..f3b42efc 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -41,6 +41,8 @@ SET(SHADERGEN_COMMON_FILES ${STD_MTL_HEADER_PATH}/UBOCommon.h common/MFCommon.h common/MFGetPosition.h common/MFGetNormal.h + common/MFCamera.h + common/MFBillboard.h ) SOURCE_GROUP("Common" FILES ${SHADERGEN_COMMON_FILES}) diff --git a/src/ShaderGen/common/MFBillboard.h b/src/ShaderGen/common/MFBillboard.h new file mode 100644 index 00000000..43c7af7e --- /dev/null +++ b/src/ShaderGen/common/MFBillboard.h @@ -0,0 +1,38 @@ +#pragma once + +#include"MFCamera.h" +#include + +STD_MTL_NAMESPACE_BEGIN +namespace func +{ + //@link http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/billboards/ + + constexpr const ShaderBufferSource SBS_Billboard= + { + "BillboardData", + "billboard", + + R"( +vec2 center; +vec2 size; + )" + }; + + constexpr const char *GetBillboardPosition=R"( +vec4 GetBillboardPosition() +{ + mat4 cv_mat =GetCameraViewMatrix(); + + vec3 cv_right =GetViewRight(cv_mat); + vec3 cv_up =GetViewUp(cv_mat); + + vec3 pos =GetPosition3D(); + + vec3(billboard.center,0)+ + cv_right*pos.x*billboard.size.x+ + cv_up *pos.y*billboard.size.y; +} +)"; +}//namespace func +STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/common/MFCamera.h b/src/ShaderGen/common/MFCamera.h new file mode 100644 index 00000000..8e7f3589 --- /dev/null +++ b/src/ShaderGen/common/MFCamera.h @@ -0,0 +1,31 @@ +#pragma once + +#include + +STD_MTL_NAMESPACE_BEGIN +namespace func +{ + //@link http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/billboards/ + +constexpr const char *GetCameraViewMatrix=R"( +mat4 GetCameraViewMatrix() +{ + return camera.view*GetLocalToWorld(); +} +)"; + + constexpr const char *GetCameraViewRight=R"( +vec3 GetViewRight(mat4 cv) +{ + return vec3(cv[0][0],cv[1][0],cv[2][0]); +} +)"; + + constexpr const char *GetCameraViewUp=R"( +vec3 GetViewUp(mat4 cv) +{ + return vec3(cv[0][1],cv[1][1],cv[2][1]); +} +)"; +}//namespace func +STD_MTL_NAMESPACE_END