diff --git a/CMSceneGraph b/CMSceneGraph index 65cefb3f..dc1cd8a2 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 65cefb3f129e244a938b281f0b1cbd7170dfbd4f +Subproject commit dc1cd8a2d4a90ebdd50b4812014c3857a4caeb65 diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index f41d6ee6..a13c0eaa 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -202,36 +202,34 @@ namespace Matrix4f l2w=GetLocalToWorldMatrix(); Vector3f start; Vector3f end; + Vector3f p_ray,p_ls; float dist; + float pixel_per_unit; start=TransformPosition(l2w,Vector3f(0,0,0)); //将原点转换到世界坐标 { end=TransformPosition(l2w,Vector3f((GIZMO_CONE_LENGTH+GIZMO_CYLINDER_HALF_LENGTH)*20,0,0)); - dist=ray.ToLineSegmentDistance(start,end); + //求射线与线段的最近点 + ray.ClosestPoint(p_ray, //射线上的点 + p_ls, //线段上的点 + start,end); //线段 - MaterialInstance *mi; + dist=glm::distance(p_ray,p_ls); //计算射线与线段的距离 - if(distGetPixelPerUnit(p_ls); - //MaterialInstance *mi=GetGizmoMI3D(distSetOverrideMaterial(mi); axis[size_t(AXIS::X)].cone->SetOverrideMaterial(mi); - std::cout<<"Mouse: "< #include #include #include #include -namespace hgl +namespace hgl::graph { - namespace graph + /** + * 渲染对象列表
+ * 该类会长期保存使用过的材质信息,避重新分配造成的时间和空间浪费。如需彻底清空列表请使用Clear()函数 + */ + class RenderList { - /** - * 渲染对象列表
- * 该类会长期保存使用过的材质信息,避重新分配造成的时间和空间浪费。如需彻底清空列表请使用Clear()函数 - */ - class RenderList - { - protected: + protected: - VulkanDevice * device; + VulkanDevice * device; - CameraInfo * camera_info; ///<相机信息 + CameraInfo * camera_info; ///<相机信息 - uint renderable_count; ///<可渲染对象数量 - MaterialRenderMap mrl_map; ///<按材质分类的渲染列表 + uint renderable_count; ///<可渲染对象数量 + MaterialRenderMap mrl_map; ///<按材质分类的渲染列表 - protected: + protected: - virtual bool ExpendNode(SceneNode *); + virtual bool ExpendNode(SceneNode *); - public: + public: - const CameraInfo *GetCameraInfo()const{return camera_info;} + const CameraInfo *GetCameraInfo()const{return camera_info;} - public: + public: - RenderList(VulkanDevice *); - virtual ~RenderList()=default; + RenderList(VulkanDevice *); + virtual ~RenderList()=default; - virtual void SetCameraInfo(CameraInfo *ci){camera_info=ci;} ///<设置相机信息 - virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表 + virtual void SetCameraInfo(CameraInfo *ci){camera_info=ci;} ///<设置相机信息 + virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表 - bool IsEmpty()const{return !renderable_count;} ///<是否是空的 + bool IsEmpty()const{return !renderable_count;} ///<是否是空的 - virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象 + virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象 - virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据 - virtual void UpdateMaterialInstance(MeshComponent *); ///<有对象互换了材质实例 + virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据 + virtual void UpdateMaterialInstance(MeshComponent *); ///<有对象互换了材质实例 - virtual void Clear(); ///<彻底清理 - };//class RenderList - }//namespace graph -}//namespace hgl -#endif//HGL_GRAPH_RENDER_LIST_INCLUDE + virtual void Clear(); ///<彻底清理 + };//class RenderList +}//namespace hgl::graph