ULRE/example/Gizmo/Gizmo3DMove.cpp

152 lines
3.8 KiB
C++
Raw Normal View History

2024-06-25 01:17:47 +08:00
/*
Gizmo move
2024-06-25 01:17:47 +08:00
ref: Blender 4
2024-06-25 01:17:47 +08:00
0 9-10
*----------------->>>>
|
|
| 5+
| +6
|
|
v
2024-06-25 01:17:47 +08:00
10
22
15,5
2024-06-25 01:17:47 +08:00
1
*/
#include"GizmoResource.h"
2024-07-28 23:34:04 +08:00
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/InlineGeometry.h>
VK_NAMESPACE_BEGIN
2024-07-28 23:34:04 +08:00
namespace
{
2024-07-28 23:34:04 +08:00
static StaticMesh *sm_gizmo_move=nullptr;
}//namespace
StaticMesh *GetGizmoMoveStaticMesh()
{
return sm_gizmo_move;
}
void ClearGizmoMoveStaticMesh()
{
SAFE_CLEAR(sm_gizmo_move);
}
bool InitGizmoMoveStaticMesh()
{
Renderable *sphere=GetGizmoRenderable(GizmoShape::Sphere,GizmoColor::White);
Renderable *cylinder[3]
{
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Blue),
};
Renderable *cone[3]
2024-07-28 23:34:04 +08:00
{
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Blue),
};
2024-07-30 13:55:44 +08:00
Renderable *plane[3]=
{
GetGizmoRenderable(GizmoShape::Plane,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Plane,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Plane,GizmoColor::Blue)
};
if(!sphere)
return(false);
2024-07-28 23:34:04 +08:00
for(int i=0;i<3;i++)
{
if(!cylinder[i])
2024-07-28 23:34:04 +08:00
return(false);
if(!cone[i])
return(false);
2024-07-30 23:54:25 +08:00
if(!plane[i])
return(false);
}
2024-07-28 23:34:04 +08:00
{
SceneNode *root_node=new SceneNode(scale(1,1,2)); //.////// XY有效Z无效。。。在查为什么
2024-08-29 13:07:02 +08:00
root_node->CreateSubNode(sphere);
2024-07-28 23:34:04 +08:00
{
Transform tm;
2024-07-28 23:34:04 +08:00
2024-08-05 01:25:49 +08:00
const Vector3f one_scale(1);
const Vector3f plane_scale(2);
const Vector3f cylinder_scale(0.35f,0.35f,4.0f);
2024-07-30 13:55:44 +08:00
{
tm.SetScale(cylinder_scale);
tm.SetTranslation(0,0,4.5f);
root_node->CreateSubNode(tm,cylinder[2]); //Z 向上圆柱
tm.SetScale(one_scale);
tm.SetTranslation(0,0,9.5f);
root_node->CreateSubNode(tm,cone[2]); //Z 向上圆锥
tm.SetScale(plane_scale);
tm.SetTranslation(5,5,0);
root_node->CreateSubNode(tm,plane[2]);
}
{
tm.SetScale(cylinder_scale);
tm.SetRotation(AxisVector::Y,90);
tm.SetTranslation(4.5f,0,0);
root_node->CreateSubNode(tm,cylinder[0]); //X 向右圆柱
tm.SetScale(one_scale);
tm.SetTranslation(9.5f,0,0);
root_node->CreateSubNode(tm,cone[0]); //X 向右圆锥
tm.SetScale(plane_scale);
tm.SetTranslation(0,5,5);
root_node->CreateSubNode(tm,plane[0]);
}
{
tm.SetScale(cylinder_scale);
tm.SetRotation(AxisVector::X,-90);
tm.SetTranslation(0,4.5f,0);
2024-07-28 23:34:04 +08:00
2024-07-30 13:55:44 +08:00
root_node->CreateSubNode(tm,cylinder[1]); //Y 向前圆柱
tm.SetScale(one_scale);
tm.SetTranslation(0,9.5f,0);
root_node->CreateSubNode(tm,cone[1]); //Y 向前圆锥
2024-07-28 23:34:04 +08:00
2024-07-30 13:55:44 +08:00
tm.SetScale(plane_scale);
tm.SetTranslation(5,0,5);
root_node->CreateSubNode(tm,plane[1]);
}
}
sm_gizmo_move=CreateGizmoStaticMesh(root_node);
2024-07-28 23:34:04 +08:00
}
if(!sm_gizmo_move)
return(false);
return(true);
}
VK_NAMESPACE_END