创建GizmoMoveNode,在下一版中尝度接收鼠标事件
This commit is contained in:
parent
e2a61e175f
commit
1af89ca37b
@ -32,43 +32,140 @@ VK_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
///**
|
/**
|
||||||
//* 移动 Gizmo 节点
|
* 移动 Gizmo 节点
|
||||||
//*/
|
*/
|
||||||
//class GizmoMoveNode:public SceneNode
|
class GizmoMoveNode:public SceneNode
|
||||||
//{
|
{
|
||||||
// struct GizmoMoveAxis
|
struct GizmoMoveAxis
|
||||||
// {
|
{
|
||||||
// MeshComponent *cylinder =nullptr; //圆柱
|
MeshComponent *cylinder; //圆柱
|
||||||
// MeshComponent *cone =nullptr; //圆锥
|
MeshComponent *cone; //圆锥
|
||||||
// MeshComponent *square =nullptr; //双轴调节正方形
|
MeshComponent *square; //双轴调节正方形
|
||||||
// };
|
};
|
||||||
|
|
||||||
// MeshComponent *sphere=nullptr;
|
MeshComponent *sphere=nullptr;
|
||||||
// GizmoMoveAxis axis[3]; //X,Y,Z 三个轴
|
GizmoMoveAxis axis[3]{}; //X,Y,Z 三个轴
|
||||||
|
|
||||||
//public:
|
public:
|
||||||
|
|
||||||
// GizmoMoveNode(RenderFramework *rf)
|
using SceneNode::SceneNode;
|
||||||
// {
|
|
||||||
// //SetName("GizmoMoveNode");
|
|
||||||
|
|
||||||
// Mesh *sphere=GetGizmoMesh(GizmoShape::Sphere,GizmoColor::White);
|
SceneNode *CreateNode()const override
|
||||||
|
{
|
||||||
|
return(new GizmoMoveNode);
|
||||||
|
}
|
||||||
|
|
||||||
// sn_gizmo_move->AttachComponent(rf->CreateComponent<MeshComponent>(sphere));
|
bool Init(RenderFramework *render_framework)
|
||||||
|
{
|
||||||
|
ComponentDataPtr sphere=GetGizmoMeshComponentDataPtr(GizmoShape::Sphere,GizmoColor::White);
|
||||||
|
|
||||||
// for(int i=0;i<3;i++)
|
ComponentDataPtr cylinder[3]
|
||||||
// {
|
{
|
||||||
// axis[i].cylinder=nullptr;
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Red),
|
||||||
// axis[i].cone=nullptr;
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Green),
|
||||||
// axis[i].square=nullptr;
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Blue),
|
||||||
// }
|
};
|
||||||
// }
|
|
||||||
|
|
||||||
|
ComponentDataPtr cone[3]
|
||||||
|
{
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Red),
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Green),
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Blue),
|
||||||
|
};
|
||||||
|
|
||||||
//};//class GizmoMoveNode:public SceneNode
|
ComponentDataPtr square[3]=
|
||||||
|
{
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Red),
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Green),
|
||||||
|
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Blue)
|
||||||
|
};
|
||||||
|
|
||||||
static SceneNode *sn_gizmo_move=nullptr;
|
if(!sphere)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
for(int i=0;i<3;i++)
|
||||||
|
{
|
||||||
|
if(!cylinder[i])
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!cone[i])
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!square[i])
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateComponentInfo cci(this);
|
||||||
|
|
||||||
|
render_framework->CreateComponent<MeshComponent>(&cci,sphere);
|
||||||
|
|
||||||
|
{
|
||||||
|
Transform tm;
|
||||||
|
|
||||||
|
const Vector3f one_scale(1);
|
||||||
|
const Vector3f square_scale(2);
|
||||||
|
const Vector3f cylinder_scale(GIZMO_CYLINDER_RADIUS,GIZMO_CYLINDER_RADIUS,GIZMO_CYLINDER_HALF_LENGTH);
|
||||||
|
|
||||||
|
{
|
||||||
|
tm.SetScale(cylinder_scale);
|
||||||
|
tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET);
|
||||||
|
cci.mat=tm;
|
||||||
|
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[2]); //Z 向上圆柱
|
||||||
|
|
||||||
|
tm.SetScale(one_scale);
|
||||||
|
tm.SetTranslation(0,0,GIZMO_CONE_OFFSET);
|
||||||
|
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);
|
||||||
|
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);
|
||||||
|
cci.mat=tm;
|
||||||
|
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[0]); //X 向右圆柱
|
||||||
|
|
||||||
|
tm.SetScale(one_scale);
|
||||||
|
tm.SetTranslation(GIZMO_CONE_OFFSET,0,0);
|
||||||
|
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);
|
||||||
|
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);
|
||||||
|
cci.mat=tm;
|
||||||
|
render_framework->CreateComponent<MeshComponent>(&cci,cylinder[1]); //Y 向前圆柱
|
||||||
|
|
||||||
|
tm.SetScale(one_scale);
|
||||||
|
tm.SetTranslation(0,GIZMO_CONE_OFFSET,0);
|
||||||
|
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);
|
||||||
|
cci.mat=tm;
|
||||||
|
render_framework->CreateComponent<MeshComponent>(&cci,square[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
};//class GizmoMoveNode:public SceneNode
|
||||||
|
|
||||||
|
static GizmoMoveNode *sn_gizmo_move=nullptr;
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
SceneNode *GetGizmoMoveNode()
|
SceneNode *GetGizmoMoveNode()
|
||||||
@ -83,104 +180,17 @@ void ClearGizmoMoveNode()
|
|||||||
|
|
||||||
bool InitGizmoMoveNode(RenderFramework *render_framework)
|
bool InitGizmoMoveNode(RenderFramework *render_framework)
|
||||||
{
|
{
|
||||||
ComponentDataPtr sphere=GetGizmoMeshComponentDataPtr(GizmoShape::Sphere,GizmoColor::White);
|
if(sn_gizmo_move)
|
||||||
|
|
||||||
ComponentDataPtr cylinder[3]
|
|
||||||
{
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Red),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Green),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cylinder,GizmoColor::Blue),
|
|
||||||
};
|
|
||||||
|
|
||||||
ComponentDataPtr cone[3]
|
|
||||||
{
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Red),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Green),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Cone,GizmoColor::Blue),
|
|
||||||
};
|
|
||||||
|
|
||||||
ComponentDataPtr square[3]=
|
|
||||||
{
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Red),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Green),
|
|
||||||
GetGizmoMeshComponentDataPtr(GizmoShape::Square,GizmoColor::Blue)
|
|
||||||
};
|
|
||||||
|
|
||||||
if(!sphere)
|
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
for(int i=0;i<3;i++)
|
sn_gizmo_move=new GizmoMoveNode;
|
||||||
|
|
||||||
|
if(!sn_gizmo_move->Init(render_framework))
|
||||||
{
|
{
|
||||||
if(!cylinder[i])
|
delete sn_gizmo_move;
|
||||||
return(false);
|
sn_gizmo_move=nullptr;
|
||||||
|
|
||||||
if(!cone[i])
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!square[i])
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
sn_gizmo_move=new SceneNode();
|
|
||||||
|
|
||||||
sn_gizmo_move->AttachComponent(render_framework->CreateComponent<MeshComponent>(sphere));
|
|
||||||
|
|
||||||
{
|
|
||||||
Transform tm;
|
|
||||||
|
|
||||||
const Vector3f one_scale(1);
|
|
||||||
const Vector3f square_scale(2);
|
|
||||||
const Vector3f cylinder_scale(GIZMO_CYLINDER_RADIUS,GIZMO_CYLINDER_RADIUS,GIZMO_CYLINDER_HALF_LENGTH);
|
|
||||||
|
|
||||||
{
|
|
||||||
tm.SetScale(cylinder_scale);
|
|
||||||
tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET);
|
|
||||||
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,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 向上圆锥
|
|
||||||
|
|
||||||
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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
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 向右圆柱
|
|
||||||
|
|
||||||
tm.SetScale(one_scale);
|
|
||||||
tm.SetTranslation(GIZMO_CONE_OFFSET,0,0);
|
|
||||||
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,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]);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
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 向前圆柱
|
|
||||||
|
|
||||||
tm.SetScale(one_scale);
|
|
||||||
tm.SetTranslation(0,GIZMO_CONE_OFFSET,0);
|
|
||||||
render_framework->CreateComponent<MeshComponent>(tm.GetMatrix(),sn_gizmo_move,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]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!sn_gizmo_move)
|
|
||||||
return(false);
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user