增加Gizmo3DMove::DuplicationComponents实现,删除Gizmo::Duplication实现。旧的方法不对,复制了COMPONENT,但记录的是旧的COMPONENT,所以改OVERRIDE MATERIAL无效。

This commit is contained in:
2025-07-28 13:54:44 +08:00
parent 6b86823755
commit eb4a8fba21

View File

@@ -66,17 +66,25 @@ namespace
return(new GizmoMoveNode);
}
SceneNode *Duplication()const override
void DuplicationComponents(SceneNode *node) const override
{
GizmoMoveNode *new_gmn=(GizmoMoveNode *)SceneNode::Duplication();
GizmoMoveNode *gmn=(GizmoMoveNode *)node;
if(!gmn)
return;
if(!new_gmn)
return(nullptr);
#define DUPLICATION_COMPONENT(c) gmn->c=(MeshComponent *)(c->Duplication()); \
gmn->AttachComponent(gmn->c);
new_gmn->sphere=sphere;
hgl_cpy(new_gmn->axis,axis);
DUPLICATION_COMPONENT(sphere);
return new_gmn;
for(size_t i=0;i<3;i++)
{
DUPLICATION_COMPONENT(axis[i].cylinder);
DUPLICATION_COMPONENT(axis[i].cone);
DUPLICATION_COMPONENT(axis[i].square);
}
#undef DUPLICATION_COMPONENT
}
bool CreateGizmoGeometry(RenderFramework *render_framework)
@@ -194,13 +202,12 @@ namespace
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));
end=TransformPosition(l2w,Vector3f((GIZMO_CONE_LENGTH+GIZMO_CYLINDER_HALF_LENGTH)*20,0,0));
dist=ray.ToLineSegmentDistance(start,end);