ULRE/example/Gizmo/Gizmo3DRotate.cpp

80 lines
1.7 KiB
C++
Raw Normal View History

2024-07-30 23:54:25 +08:00
#include"GizmoResource.h"
#include<hgl/graph/VKRenderResource.h>
2024-09-02 00:32:30 +08:00
#include<hgl/graph/TransformFaceToCamera.h>
2024-07-30 23:54:25 +08:00
VK_NAMESPACE_BEGIN
namespace
{
static StaticMesh *sm_gizmo_rotate=nullptr;
}//namespace
StaticMesh *GetGizmoRotateStaticMesh()
{
return sm_gizmo_rotate;
}
void ClearGizmoRotateStaticMesh()
{
SAFE_CLEAR(sm_gizmo_rotate);
}
bool InitGizmoRotateStaticMesh()
{
Renderable *torus[4]
{
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Blue),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::White),
};
2024-10-13 00:15:45 +08:00
for(auto *r:torus)
2024-07-30 23:54:25 +08:00
{
2024-10-13 00:15:45 +08:00
if(!r)
2024-07-30 23:54:25 +08:00
return(false);
}
{
SceneNode *root_node=new SceneNode();
{
Transform tm;
tm.SetScale(GIZMO_ARROW_LENGTH);
2024-07-30 23:54:25 +08:00
2024-10-06 14:51:38 +08:00
root_node->Add(new SceneNode(tm,torus[0]));
2024-07-30 23:54:25 +08:00
2024-07-31 00:17:23 +08:00
tm.SetRotation(AXIS::Z,90);
2024-10-06 14:51:38 +08:00
root_node->Add(new SceneNode(tm,torus[1]));
2024-07-30 23:54:25 +08:00
2024-07-31 00:17:23 +08:00
tm.SetRotation(AXIS::Y,90);
2024-10-06 14:51:38 +08:00
root_node->Add(new SceneNode(tm,torus[2]));
2024-07-30 23:54:25 +08:00
}
2024-09-02 00:32:30 +08:00
{
SceneNode *white_torus=new SceneNode(scale(13),torus[3]);
white_torus->SetLocalNormal(AxisVector::X);
TransformFaceToCamera *rotate_white_torus_tfc=new TransformFaceToCamera();
//暂时因为无法传入Camera所以无法正确计算朝向正在设计Actor/World结构
2024-09-02 00:32:30 +08:00
white_torus->GetTransform().AddTransform(rotate_white_torus_tfc);
2024-10-06 02:30:59 +08:00
root_node->Add(white_torus);
2024-09-02 00:32:30 +08:00
}
2024-07-30 23:54:25 +08:00
sm_gizmo_rotate=CreateGizmoStaticMesh(root_node);
}
if(!sm_gizmo_rotate)
return(false);
return(true);
}
VK_NAMESPACE_END