Compare commits
2 Commits
d577642533
...
cb93ade96f
Author | SHA1 | Date | |
---|---|---|---|
cb93ade96f | |||
0b2d3d100a |
2
CMCore
2
CMCore
Submodule CMCore updated: 0ed44f0531...11838e9cc8
Submodule CMSceneGraph updated: b914dbfb66...fde1c85ad1
@@ -26,8 +26,12 @@
|
||||
#include<hgl/graph/VKRenderResource.h>
|
||||
#include<hgl/graph/InlineGeometry.h>
|
||||
#include<hgl/graph/RenderFramework.h>
|
||||
#include<hgl/graph/Scene.h>
|
||||
#include<hgl/component/MeshComponent.h>
|
||||
#include<hgl/io/event/MouseEvent.h>
|
||||
#include<hgl/graph/Ray.h>
|
||||
|
||||
#include<iostream>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
@@ -175,6 +179,51 @@ namespace
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool OnMove(const Vector2i &mouse_coord) override
|
||||
{
|
||||
CameraControl *cc=GetCameraControl();
|
||||
|
||||
if(!cc)
|
||||
return(false);
|
||||
|
||||
Ray ray;
|
||||
|
||||
cc->SetMouseRay(&ray,mouse_coord);
|
||||
|
||||
Matrix4f l2w=GetLocalToWorldMatrix();
|
||||
Vector3f start;
|
||||
Vector3f end;
|
||||
Vector3f cross_point;
|
||||
float dist;
|
||||
|
||||
start=TransformPosition(l2w,Vector3f(0,0,0)); //将原点转换到世界坐标
|
||||
|
||||
{
|
||||
end=TransformPosition(l2w,Vector3f(GIZMO_CYLINDER_HALF_LENGTH*20,0,0));
|
||||
|
||||
cross_point=ray.ClosestPoint(start);
|
||||
|
||||
dist=length(cross_point,start);
|
||||
|
||||
//dist=ray.ToLineSegmentDistance(start,end);
|
||||
|
||||
//dist=ray.ToPointDistance(start);
|
||||
|
||||
MaterialInstance *mi=GetGizmoMI3D(dist<GIZMO_CYLINDER_RADIUS*100?GizmoColor::Yellow:GizmoColor::Red);
|
||||
|
||||
axis[size_t(AXIS::X)].cylinder->SetOverrideMaterial(mi);
|
||||
axis[size_t(AXIS::X)].cone->SetOverrideMaterial(mi);
|
||||
|
||||
std::cout<<"Mouse: "<<mouse_coord.x<<","<<mouse_coord.y<<std::endl;
|
||||
std::cout<<"CrossPoint: "<<cross_point.x<<","<<cross_point.y<<","<<cross_point.z<<std::endl;
|
||||
std::cout<<"Ray(Ori): "<<ray.origin.x<<","<<ray.origin.y<<","<<ray.origin.z<<")"<<std::endl;
|
||||
std::cout<<"Ray(Dir): "<<ray.direction.x<<","<<ray.direction.y<<","<<ray.direction.z<<")"<<std::endl;
|
||||
std::cout<<"Distance: "<<dist<<std::endl;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};//class GizmoMoveNode:public SceneNode
|
||||
|
||||
static GizmoMoveNode *sn_gizmo_move=nullptr;
|
||||
|
@@ -46,7 +46,7 @@ namespace hgl
|
||||
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
|
||||
|
||||
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据
|
||||
virtual void UpdateMaterialInstance(MeshComponent *); ///<有对象互换了材质实例
|
||||
virtual void UpdateMaterialInstance(MeshComponent *); ///<有对象互换了材质实例
|
||||
|
||||
virtual void Clear(); ///<彻底清理
|
||||
};//class RenderList
|
||||
|
@@ -6,12 +6,16 @@
|
||||
|
||||
namespace hgl::graph
|
||||
{
|
||||
class RenderFramework;
|
||||
|
||||
/**
|
||||
* 场景管理器<Br>
|
||||
* 管理一个场景中的所有资源与场景节点
|
||||
*/
|
||||
class Scene
|
||||
{
|
||||
RenderFramework *render_framework=nullptr; ///<渲染框架
|
||||
|
||||
U8String SceneName; ///<场景名称
|
||||
|
||||
ObjectList<SceneNode> SceneNodePool; ///<场景节点池
|
||||
@@ -28,10 +32,17 @@ namespace hgl::graph
|
||||
|
||||
SceneNode * GetRootNode (){return root_node;} ///<获取场景根节点
|
||||
|
||||
RenderFramework * GetRenderFramework()const
|
||||
{
|
||||
return render_framework;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
Scene()
|
||||
Scene(RenderFramework *rf)
|
||||
{
|
||||
render_framework=rf;
|
||||
|
||||
root_node=new SceneNode(this);
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,8 @@ namespace hgl::graph
|
||||
//每个SceneNode都要记录Scene来区分自己属于那个场景
|
||||
//这个场景可能是一个确实是一个场景,也有可能只是一个StaticMesh
|
||||
|
||||
class CameraControl;
|
||||
|
||||
using SceneNodeID =int64;
|
||||
|
||||
using SceneNodeList =ObjectList<SceneNode>;
|
||||
@@ -59,7 +61,9 @@ namespace hgl::graph
|
||||
|
||||
public:
|
||||
|
||||
Scene *GetScene()const{ return main_scene; } ///<取得主场景
|
||||
Scene * GetScene()const{ return main_scene; } ///<取得主场景
|
||||
RenderFramework * GetRenderFramework()const; ///<取得渲染框架
|
||||
CameraControl * GetCameraControl()const; ///<取得默认摄像机控制器
|
||||
|
||||
const SceneNodeID & GetNodeID ()const { return node_id; } ///<取得节点ID
|
||||
const SceneNodeName & GetNodeName ()const { return node_name; } ///<取得节点名称
|
||||
|
@@ -134,7 +134,7 @@ bool RenderFramework::Init(uint w,uint h)
|
||||
|
||||
render_resource=new RenderResource(device);
|
||||
|
||||
OnChangeDefaultScene(new Scene);
|
||||
OnChangeDefaultScene(new Scene(this));
|
||||
|
||||
default_camera=new Camera();
|
||||
|
||||
|
@@ -2,9 +2,20 @@
|
||||
#include<hgl/component/SceneComponent.h>
|
||||
#include<hgl/graph/Mesh.h>
|
||||
#include<hgl/graph/Scene.h>
|
||||
#include<hgl/graph/RenderFramework.h>
|
||||
|
||||
namespace hgl::graph
|
||||
{
|
||||
RenderFramework *SceneNode::GetRenderFramework()const
|
||||
{
|
||||
return main_scene?main_scene->GetRenderFramework():nullptr;
|
||||
}
|
||||
|
||||
CameraControl *SceneNode::GetCameraControl()const
|
||||
{
|
||||
return main_scene?main_scene->GetRenderFramework()->GetDefaultCameraControl():nullptr;
|
||||
}
|
||||
|
||||
//void SceneNode::SetRenderable(Mesh *ri)
|
||||
//{
|
||||
// render_obj=ri;
|
||||
|
Reference in New Issue
Block a user