[working] gizmo3DMove,需要考虑如何绘制变动中的gizmo

This commit is contained in:
2025-08-01 09:13:41 +08:00
parent d9c0ea3c51
commit 28d4d17d62
3 changed files with 19 additions and 7 deletions

2
CMCore

Submodule CMCore updated: f1a36055e4...dd01d1919a

View File

@@ -54,12 +54,16 @@ namespace
MeshComponent *sphere=nullptr; MeshComponent *sphere=nullptr;
GizmoMoveAxis axis[3]{}; //X,Y,Z 三个轴 GizmoMoveAxis axis[3]{}; //X,Y,Z 三个轴
protected:
int CurAXIS=-1; //当前鼠标选中轴 int CurAXIS=-1; //当前鼠标选中轴
float CurDist=0; //当前距离 float CurDist=0; //当前距离
int PickAXIS=-1; //拾取轴 int PickAXIS=-1; //拾取轴
float PickDist=0; //拾取辆距离轴心的距离 float PickDist=0; //拾取辆距离轴心的距离
TransformTranslate3f CurTranslate;
public: public:
using SceneNode::SceneNode; using SceneNode::SceneNode;
@@ -205,10 +209,12 @@ namespace
{ {
GizmoMoveNode::OnMove(mp); GizmoMoveNode::OnMove(mp);
if(CurAXIS>0&&CurAXIS<3) if(CurAXIS>=0&&CurAXIS<3)
{ {
PickAXIS=CurAXIS; PickAXIS=CurAXIS;
PickDist=CurDist; PickDist=CurDist;
CurTranslate.SetOffset(Vector3f(0,0,0)); //重置当前平移偏移
} }
return io::EventProcResult::Continue; return io::EventProcResult::Continue;
@@ -269,6 +275,12 @@ namespace
CurAXIS=i; CurAXIS=i;
CurDist=glm::length(p_ls); //计算线段上的点与原点的距离 CurDist=glm::length(p_ls); //计算线段上的点与原点的距离
if(CurAXIS==PickAXIS) //如果当前轴与拾取轴相同
{
//如果当前轴与拾取轴相同,则计算平移偏移
CurTranslate.SetOffset(axis_vector*(CurDist-PickDist));
}
} }
else else
{ {