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

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

View File

@ -32,57 +32,32 @@ VK_NAMESPACE_BEGIN
namespace
{
///**
//* 移动 Gizmo 节点
//*/
//class GizmoMoveNode:public SceneNode
//{
// struct GizmoMoveAxis
// {
// MeshComponent *cylinder =nullptr; //圆柱
// MeshComponent *cone =nullptr; //圆锥
// MeshComponent *square =nullptr; //双轴调节正方形
// };
/**
* Gizmo
*/
class GizmoMoveNode:public SceneNode
{
struct GizmoMoveAxis
{
MeshComponent *cylinder; //圆柱
MeshComponent *cone; //圆锥
MeshComponent *square; //双轴调节正方形
};
// MeshComponent *sphere=nullptr;
// GizmoMoveAxis axis[3]; //X,Y,Z 三个轴
MeshComponent *sphere=nullptr;
GizmoMoveAxis axis[3]{}; //X,Y,Z 三个轴
//public:
public:
// GizmoMoveNode(RenderFramework *rf)
// {
// //SetName("GizmoMoveNode");
using SceneNode::SceneNode;
// Mesh *sphere=GetGizmoMesh(GizmoShape::Sphere,GizmoColor::White);
SceneNode *CreateNode()const override
{
return(new GizmoMoveNode);
}
// 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;
}
void ClearGizmoMoveNode()
{
SAFE_CLEAR(sn_gizmo_move);
}
bool InitGizmoMoveNode(RenderFramework *render_framework)
{
bool Init(RenderFramework *render_framework)
{
ComponentDataPtr sphere=GetGizmoMeshComponentDataPtr(GizmoShape::Sphere,GizmoColor::White);
ComponentDataPtr cylinder[3]
@ -121,10 +96,9 @@ bool InitGizmoMoveNode(RenderFramework *render_framework)
return(false);
}
{
sn_gizmo_move=new SceneNode();
CreateComponentInfo cci(this);
sn_gizmo_move->AttachComponent(render_framework->CreateComponent<MeshComponent>(sphere));
render_framework->CreateComponent<MeshComponent>(&cci,sphere);
{
Transform tm;
@ -136,52 +110,88 @@ bool InitGizmoMoveNode(RenderFramework *render_framework)
{
tm.SetScale(cylinder_scale);
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.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.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.SetRotation(AxisVector::Y,90);
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.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.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.SetRotation(AxisVector::X,-90);
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.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.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);
sn_gizmo_move=new GizmoMoveNode;
if(!sn_gizmo_move->Init(render_framework))
{
delete sn_gizmo_move;
sn_gizmo_move=nullptr;
return(false);
}
return(true);
}