diff --git a/CMCore b/CMCore index 14ae93e9..09d77726 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 14ae93e9096b37dd832cee1903f9ae546b033b59 +Subproject commit 09d777261f4249ccdba5bef44d794742f4e3237a diff --git a/example/Gizmo/Gizmo3DRotate.cpp b/example/Gizmo/Gizmo3DRotate.cpp index d3655e46..25dd3020 100644 --- a/example/Gizmo/Gizmo3DRotate.cpp +++ b/example/Gizmo/Gizmo3DRotate.cpp @@ -1,6 +1,5 @@ #include"GizmoResource.h" #include -#include #include VK_NAMESPACE_BEGIN @@ -31,9 +30,9 @@ bool InitGizmoRotateStaticMesh() GetGizmoRenderable(GizmoShape::Torus,GizmoColor::White), }; - for(int i=0;i<4;i++) + for(auto *r:torus) { - if(!torus[i]) + if(!r) return(false); } diff --git a/inc/hgl/graph/ShadowPolicy.h b/inc/hgl/graph/ShadowPolicy.h index a8cbaaf9..72ea4aca 100644 --- a/inc/hgl/graph/ShadowPolicy.h +++ b/inc/hgl/graph/ShadowPolicy.h @@ -30,13 +30,14 @@ namespace hgl Global, ///<使用全局动态阴影 + PerObject, ///<独立对象阴影(就是每个物件独立走普通shadowmap得到一张深度图,缓存到硬盘) + Plane, ///<压片阴影(极少三角面的片状物体专用) - RTDF, ///<距离场动态阴影(静态物体专用) - Capsule, ///<胶囊体动态阴影(骨骼动画专用) + Capsule, ///<胶囊体阴影(一般用于骨骼动画模型阴影,每根骨骼一个胶囊) + Cube, ///<立方体阴影(一般用于一些建筑物,比如楼房直接使用一个Cube做Raymarch) + MeshSDF, ///<模型3D距离场阴影 - ShadowVolume, ///<体积阴影(超规则类物体专用,如房子) - - ENUM_CLASS_RANGE(None,ShadowVolume) + ENUM_CLASS_RANGE(None,MeshSDF) }; }//namespace graph }//namespace hgl diff --git a/inc/hgl/graph/StaticMesh.h b/inc/hgl/graph/StaticMesh.h index 0e8174ae..17d4f8f6 100644 --- a/inc/hgl/graph/StaticMesh.h +++ b/inc/hgl/graph/StaticMesh.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include VK_NAMESPACE_BEGIN @@ -11,6 +12,8 @@ class StaticMesh { protected: + StaticMeshLODPolicy lod_policy; ///GetScene():root_node; } ///<取得阴影渲染节点 SceneNode *GetPhysicNode() { return physic_proxy_static_mesh?physic_proxy_static_mesh->GetScene():root_node; } ///<取得物理渲染节点 + };//class StaticMesh VK_NAMESPACE_END diff --git a/inc/hgl/graph/StaticMeshLODPolicy.h b/inc/hgl/graph/StaticMeshLODPolicy.h new file mode 100644 index 00000000..31d60d8f --- /dev/null +++ b/inc/hgl/graph/StaticMeshLODPolicy.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +VK_NAMESPACE_BEGIN + +/** + * 静态模型LOD策略 + */ +enum class StaticMeshLODPolicy:uint8 +{ + None=0, ///<无LOD + + DiscardDetail, ///<丢弃细节 + + AnotherMesh, ///<另一个模型 + + Billboard, ///<广告牌 + + //Voxel, ///<体素 + + //MeshSDF, ///<网格SDF + + //MeshCard, ///<网格卡片 + + ENUM_CLASS_RANGE(None,Billboard) +};//enum class StaticMeshLODPolicy + +VK_NAMESPACE_END diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index c21015b1..8c4412c7 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -36,7 +36,8 @@ SET(GEOMETRY_FILES ${SG_INCLUDE_PATH}/InlineGeometry.h SOURCE_GROUP("Geometry" FILES ${GEOMETRY_FILES}) -SET(LIGHT_FILES ${SG_INCLUDE_PATH}/Light.h) +SET(LIGHT_FILES ${SG_INCLUDE_PATH}/Light.h + ${SG_INCLUDE_PATH}/ShadowPolicy.h) source_group("Light" FILES ${LIGHT_FILES}) @@ -63,7 +64,9 @@ SET(SCENE_GRAPH_SOURCE RenderList.cpp SOURCE_GROUP("Scene Graph" FILES ${SCENE_GRAPH_HEADER} ${SCENE_GRAPH_SOURCE}) -SET(STATIC_MESH_HEADER_FILES ${SG_INCLUDE_PATH}/StaticMesh.h) +SET(STATIC_MESH_HEADER_FILES ${SG_INCLUDE_PATH}/StaticMesh.h + ${SG_INCLUDE_PATH}/StaticMeshLODPolicy.h) + SET(STATIC_MESH_SOURCE_FILES StaticMesh.cpp) SOURCE_GROUP("Scene Graph\\Static Mesh" FILES ${STATIC_MESH_HEADER_FILES} ${STATIC_MESH_SOURCE_FILES})