创建GizmoMoveNode,在下一版中尝度接收鼠标事件

This commit is contained in:
hyzboy 2025-06-25 02:06:43 +08:00
parent e2a61e175f
commit 1af89ca37b

View File

@ -32,56 +32,31 @@ VK_NAMESPACE_BEGIN
namespace namespace
{ {
///** /**
//* 移动 Gizmo 节点 * Gizmo
//*/ */
//class GizmoMoveNode:public SceneNode class GizmoMoveNode:public SceneNode
//{
// struct GizmoMoveAxis
// {
// MeshComponent *cylinder =nullptr; //圆柱
// MeshComponent *cone =nullptr; //圆锥
// MeshComponent *square =nullptr; //双轴调节正方形
// };
// MeshComponent *sphere=nullptr;
// GizmoMoveAxis axis[3]; //X,Y,Z 三个轴
//public:
// GizmoMoveNode(RenderFramework *rf)
// {
// //SetName("GizmoMoveNode");
// Mesh *sphere=GetGizmoMesh(GizmoShape::Sphere,GizmoColor::White);
// sn_gizmo_move->AttachComponent(rf->CreateComponent<MeshComponent>(sphere));
// for(int i=0;i<3;i++)
// {
// axis[i].cylinder=nullptr;
// axis[i].cone=nullptr;
// axis[i].square=nullptr;
// }
// }
//};//class GizmoMoveNode:public SceneNode
static SceneNode *sn_gizmo_move=nullptr;
}//namespace
SceneNode *GetGizmoMoveNode()
{ {
return sn_gizmo_move; struct GizmoMoveAxis
{
MeshComponent *cylinder; //圆柱
MeshComponent *cone; //圆锥
MeshComponent *square; //双轴调节正方形
};
MeshComponent *sphere=nullptr;
GizmoMoveAxis axis[3]{}; //X,Y,Z 三个轴
public:
using SceneNode::SceneNode;
SceneNode *CreateNode()const override
{
return(new GizmoMoveNode);
} }
void ClearGizmoMoveNode() bool Init(RenderFramework *render_framework)
{
SAFE_CLEAR(sn_gizmo_move);
}
bool InitGizmoMoveNode(RenderFramework *render_framework)
{ {
ComponentDataPtr sphere=GetGizmoMeshComponentDataPtr(GizmoShape::Sphere,GizmoColor::White); ComponentDataPtr sphere=GetGizmoMeshComponentDataPtr(GizmoShape::Sphere,GizmoColor::White);
@ -121,10 +96,9 @@ bool InitGizmoMoveNode(RenderFramework *render_framework)
return(false); return(false);
} }
{ CreateComponentInfo cci(this);
sn_gizmo_move=new SceneNode();
sn_gizmo_move->AttachComponent(render_framework->CreateComponent<MeshComponent>(sphere)); render_framework->CreateComponent<MeshComponent>(&cci,sphere);
{ {
Transform tm; Transform tm;
@ -136,52 +110,88 @@ bool InitGizmoMoveNode(RenderFramework *render_framework)
{ {
tm.SetScale(cylinder_scale); tm.SetScale(cylinder_scale);
tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET); tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cylinder[2]); //Z 向上圆柱 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[2]); //Z 向上圆柱
tm.SetScale(one_scale); tm.SetScale(one_scale);
tm.SetTranslation(0,0,GIZMO_CONE_OFFSET); tm.SetTranslation(0,0,GIZMO_CONE_OFFSET);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cone[2]); //Z 向上圆锥 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cone[2]); //Z 向上圆锥
tm.SetScale(square_scale); tm.SetScale(square_scale);
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET,0); tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET,0);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,square[2]); cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,square[2]);
} }
{ {
tm.SetScale(cylinder_scale); tm.SetScale(cylinder_scale);
tm.SetRotation(AxisVector::Y,90); tm.SetRotation(AxisVector::Y,90);
tm.SetTranslation(GIZMO_CYLINDER_OFFSET,0,0); tm.SetTranslation(GIZMO_CYLINDER_OFFSET,0,0);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cylinder[0]); //X 向右圆柱 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[0]); //X 向右圆柱
tm.SetScale(one_scale); tm.SetScale(one_scale);
tm.SetTranslation(GIZMO_CONE_OFFSET,0,0); tm.SetTranslation(GIZMO_CONE_OFFSET,0,0);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cone[0]); //X 向右圆锥 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cone[0]); //X 向右圆锥
tm.SetScale(square_scale); tm.SetScale(square_scale);
tm.SetTranslation(0,GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET); tm.SetTranslation(0,GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,square[0]); cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,square[0]);
} }
{ {
tm.SetScale(cylinder_scale); tm.SetScale(cylinder_scale);
tm.SetRotation(AxisVector::X,-90); tm.SetRotation(AxisVector::X,-90);
tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0); tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cylinder[1]); //Y 向前圆柱 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[1]); //Y 向前圆柱
tm.SetScale(one_scale); tm.SetScale(one_scale);
tm.SetTranslation(0,GIZMO_CONE_OFFSET,0); tm.SetTranslation(0,GIZMO_CONE_OFFSET,0);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,cone[1]); //Y 向前圆锥 cci.mat=tm;
render_framework->CreateComponent<MeshComponent>(&cci,cone[1]); //Y 向前圆锥
tm.SetScale(square_scale); tm.SetScale(square_scale);
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,0,GIZMO_TWO_AXIS_OFFSET); tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,0,GIZMO_TWO_AXIS_OFFSET);
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,square[1]); cci.mat=tm;
} render_framework->CreateComponent<MeshComponent>(&cci,square[1]);
} }
} }
if(!sn_gizmo_move) return(true);
}
};//class GizmoMoveNode:public SceneNode
static GizmoMoveNode *sn_gizmo_move=nullptr;
}//namespace
SceneNode *GetGizmoMoveNode()
{
return sn_gizmo_move;
}
void ClearGizmoMoveNode()
{
SAFE_CLEAR(sn_gizmo_move);
}
bool InitGizmoMoveNode(RenderFramework *render_framework)
{
if(sn_gizmo_move)
return(false); return(false);
sn_gizmo_move=new GizmoMoveNode;
if(!sn_gizmo_move->Init(render_framework))
{
delete sn_gizmo_move;
sn_gizmo_move=nullptr;
return(false);
}
return(true); return(true);
} }