准备修复Gizmo

This commit is contained in:
hyzboy 2025-06-15 07:43:13 +08:00
parent a180970eb6
commit ec4125776a
7 changed files with 70 additions and 70 deletions

View File

@ -19,7 +19,8 @@ CreateProject(04_Gizmo3DTest GizmoTest.cpp
GizmoResource.h GizmoResource.h
GizmoResource.cpp GizmoResource.cpp
Gizmo3DMove.cpp Gizmo3DMove.cpp
Gizmo3DScale.cpp #Gizmo3DScale.cpp
Gizmo3DRotate.cpp) #Gizmo3DRotate.cpp
)
#CreateProject(03_BlenderAxis BlenderAxis.cpp) #CreateProject(03_BlenderAxis BlenderAxis.cpp)

View File

@ -34,10 +34,10 @@ enum class GizmoShape:uint
bool InitGizmoResource(RenderResource *); bool InitGizmoResource(RenderResource *);
void FreeGizmoResource(); void FreeGizmoResource();
Mesh *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color); Mesh *GetGizmoMesh(const GizmoShape &shape,const GizmoColor &color);
StaticMesh *GetGizmoMoveStaticMesh(); Mesh *GetGizmoMoveMesh();
StaticMesh *GetGizmoScaleStaticMesh(); Mesh *GetGizmoScaleMesh();
StaticMesh *GetGizmoRotateStaticMesh(); Mesh *GetGizmoRotateMesh();
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -30,41 +30,41 @@ VK_NAMESPACE_BEGIN
namespace namespace
{ {
static StaticMesh *sm_gizmo_move=nullptr; static Mesh *sm_gizmo_move=nullptr;
}//namespace }//namespace
StaticMesh *GetGizmoMoveStaticMesh() Mesh *GetGizmoMoveMesh()
{ {
return sm_gizmo_move; return sm_gizmo_move;
} }
void ClearGizmoMoveStaticMesh() void ClearGizmoMoveMesh()
{ {
SAFE_CLEAR(sm_gizmo_move); SAFE_CLEAR(sm_gizmo_move);
} }
bool InitGizmoMoveStaticMesh() bool InitGizmoMoveMesh()
{ {
Mesh *sphere=GetGizmoRenderable(GizmoShape::Sphere,GizmoColor::White); Mesh *sphere=GetGizmoMesh(GizmoShape::Sphere,GizmoColor::White);
Mesh *cylinder[3] Mesh *cylinder[3]
{ {
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Red), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Green), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Blue), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Blue),
}; };
Mesh *cone[3] Mesh *cone[3]
{ {
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Red), GetGizmoMesh(GizmoShape::Cone,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Green), GetGizmoMesh(GizmoShape::Cone,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Blue), GetGizmoMesh(GizmoShape::Cone,GizmoColor::Blue),
}; };
Mesh *circle[3]= Mesh *circle[3]=
{ {
GetGizmoRenderable(GizmoShape::Circle,GizmoColor::Red), GetGizmoMesh(GizmoShape::Circle,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Circle,GizmoColor::Green), GetGizmoMesh(GizmoShape::Circle,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Circle,GizmoColor::Blue) GetGizmoMesh(GizmoShape::Circle,GizmoColor::Blue)
}; };
if(!sphere) if(!sphere)
@ -140,7 +140,7 @@ bool InitGizmoMoveStaticMesh()
} }
} }
sm_gizmo_move=CreateGizmoStaticMesh(root_node); sm_gizmo_move=CreateGizmoMesh(root_node);
} }
if(!sm_gizmo_move) if(!sm_gizmo_move)

View File

@ -24,11 +24,11 @@ bool InitGizmoRotateStaticMesh()
{ {
Mesh *torus[4] Mesh *torus[4]
{ {
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Red), GetGizmoMesh(GizmoShape::Torus,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Green), GetGizmoMesh(GizmoShape::Torus,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Blue), GetGizmoMesh(GizmoShape::Torus,GizmoColor::Blue),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::White), GetGizmoMesh(GizmoShape::Torus,GizmoColor::White),
}; };
for(auto *r:torus) for(auto *r:torus)

View File

@ -45,26 +45,26 @@ void ClearGizmoScaleStaticMesh()
bool InitGizmoScaleStaticMesh() bool InitGizmoScaleStaticMesh()
{ {
Mesh *center_cube=GetGizmoRenderable(GizmoShape::Cube,GizmoColor::White); Mesh *center_cube=GetGizmoMesh(GizmoShape::Cube,GizmoColor::White);
Mesh *cylinder[3] Mesh *cylinder[3]
{ {
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Red), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Green), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Blue), GetGizmoMesh(GizmoShape::Cylinder,GizmoColor::Blue),
}; };
Mesh *cube[3] Mesh *cube[3]
{ {
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Red), GetGizmoMesh(GizmoShape::Cube,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Green), GetGizmoMesh(GizmoShape::Cube,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Blue), GetGizmoMesh(GizmoShape::Cube,GizmoColor::Blue),
}; };
Mesh *square[3]= Mesh *square[3]=
{ {
GetGizmoRenderable(GizmoShape::Square,GizmoColor::Red), GetGizmoMesh(GizmoShape::Square,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Square,GizmoColor::Green), GetGizmoMesh(GizmoShape::Square,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Square,GizmoColor::Blue) GetGizmoMesh(GizmoShape::Square,GizmoColor::Blue)
}; };
if(!center_cube) if(!center_cube)

View File

@ -13,14 +13,14 @@
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
bool InitGizmoMoveStaticMesh(); bool InitGizmoMoveMesh();
void ClearGizmoMoveStaticMesh(); void ClearGizmoMoveMesh();
bool InitGizmoScaleStaticMesh(); bool InitGizmoScaleMesh();
void ClearGizmoScaleStaticMesh(); void ClearGizmoScaleMesh();
bool InitGizmoRotateStaticMesh(); bool InitGizmoRotateMesh();
void ClearGizmoRotateStaticMesh(); void ClearGizmoRotateMesh();
namespace namespace
{ {
@ -39,26 +39,26 @@ namespace
static GizmoResource gizmo_line{}; static GizmoResource gizmo_line{};
static GizmoResource gizmo_triangle{}; static GizmoResource gizmo_triangle{};
struct GizmoRenderable struct GizmoMesh
{ {
Primitive *prim; Primitive *prim;
Mesh *renderable[size_t(GizmoColor::RANGE_SIZE)]; Mesh *mesh[size_t(GizmoColor::RANGE_SIZE)];
}; };
GizmoRenderable gizmo_rederable[size_t(GizmoShape::RANGE_SIZE)]{}; GizmoMesh gizmo_mesh[size_t(GizmoShape::RANGE_SIZE)]{};
void InitGizmoRenderable(const GizmoShape &gs,Primitive *prim,Pipeline *p) void InitGizmoMesh(const GizmoShape &gs,Primitive *prim,Pipeline *p)
{ {
if(!prim) if(!prim)
return; return;
GizmoRenderable *gr=gizmo_rederable+size_t(gs); GizmoMesh *gr=gizmo_mesh+size_t(gs);
gr->prim=prim; gr->prim=prim;
for(uint i=0;i<uint(GizmoColor::RANGE_SIZE);i++) for(uint i=0;i<uint(GizmoColor::RANGE_SIZE);i++)
gr->renderable[i]=CreateMesh(prim,gizmo_triangle.mi[i],p); gr->mesh[i]=CreateMesh(prim,gizmo_triangle.mi[i],p);
} }
bool InitMI(GizmoResource *gr) bool InitMI(GizmoResource *gr)
@ -88,9 +88,8 @@ namespace
RenderPass *render_pass=device->GetRenderPass(); RenderPass *render_pass=device->GetRenderPass();
{ {
mtl::Material3DCreateConfig cfg(device->GetDevAttr(),"VertexLuminance3D",PrimitiveType::Lines); mtl::Material3DCreateConfig cfg(PrimitiveType::Lines);
cfg.mtl_name="VertexLuminance3D"; //注意必须用不同名字,未来改名材质文件名+cfg hash名
cfg.local_to_world=true; cfg.local_to_world=true;
cfg.position_format=VAT_VEC3; cfg.position_format=VAT_VEC3;
@ -99,7 +98,7 @@ namespace
if(!mci) if(!mci)
return(false); return(false);
gizmo_line.mtl=gizmo_rr->CreateMaterial(mci); gizmo_line.mtl=gizmo_rr->CreateMaterial("GizmoLine",mci);
if(!gizmo_line.mtl) if(!gizmo_line.mtl)
return(false); return(false);
@ -191,7 +190,7 @@ namespace
using namespace inline_geometry; using namespace inline_geometry;
{ {
InitGizmoRenderable(GizmoShape::Square,CreatePlaneSqaure(gizmo_triangle.prim_creater),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Square,CreatePlaneSqaure(gizmo_triangle.prim_creater),gizmo_triangle.pipeline);
} }
{ {
@ -202,7 +201,7 @@ namespace
cci.field_count=16; cci.field_count=16;
cci.has_center=false; cci.has_center=false;
InitGizmoRenderable(GizmoShape::Circle,CreateCircle3DByIndexTriangles(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Circle,CreateCircle3DByIndexTriangles(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline);
} }
{ {
@ -212,11 +211,11 @@ namespace
cci.tangent=false; cci.tangent=false;
cci.tex_coord=false; cci.tex_coord=false;
InitGizmoRenderable(GizmoShape::Cube,CreateCube(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Cube,CreateCube(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline);
} }
{ {
InitGizmoRenderable(GizmoShape::Sphere,CreateSphere(gizmo_triangle.prim_creater,16),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Sphere,CreateSphere(gizmo_triangle.prim_creater,16),gizmo_triangle.pipeline);
} }
{ {
@ -227,7 +226,7 @@ namespace
cci.numberSlices=16; //圆锥底部分割数 cci.numberSlices=16; //圆锥底部分割数
cci.numberStacks=3; //圆锥高度分割数 cci.numberStacks=3; //圆锥高度分割数
InitGizmoRenderable(GizmoShape::Cone,CreateCone(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Cone,CreateCone(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline);
} }
{ {
@ -237,7 +236,7 @@ namespace
cci.numberSlices=16; //圆柱底部分割数 cci.numberSlices=16; //圆柱底部分割数
cci.radius =1; //圆柱半径 cci.radius =1; //圆柱半径
InitGizmoRenderable(GizmoShape::Cylinder,CreateCylinder(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Cylinder,CreateCylinder(gizmo_triangle.prim_creater,&cci),gizmo_triangle.pipeline);
} }
{ {
@ -248,12 +247,12 @@ namespace
tci.numberSlices=64; tci.numberSlices=64;
tci.numberStacks=8; tci.numberStacks=8;
InitGizmoRenderable(GizmoShape::Torus,CreateTorus(gizmo_triangle.prim_creater,&tci),gizmo_triangle.pipeline); InitGizmoMesh(GizmoShape::Torus,CreateTorus(gizmo_triangle.prim_creater,&tci),gizmo_triangle.pipeline);
} }
ENUM_CLASS_FOR(GizmoShape,int,i) ENUM_CLASS_FOR(GizmoShape,int,i)
{ {
if(!gizmo_rederable[i].prim) if(!gizmo_mesh[i].prim)
return(false); return(false);
} }
} }
@ -280,23 +279,23 @@ bool InitGizmoResource(RenderResource *rr)
if(!InitGizmoResource2D(device)) if(!InitGizmoResource2D(device))
return(false); return(false);
InitGizmoMoveStaticMesh(); InitGizmoMoveMesh();
InitGizmoScaleStaticMesh(); //InitGizmoScaleMesh();
InitGizmoRotateStaticMesh(); //InitGizmoRotateMesh();
return(true); return(true);
} }
void FreeGizmoResource() void FreeGizmoResource()
{ {
ClearGizmoRotateStaticMesh(); //ClearGizmoRotateMesh();
ClearGizmoScaleStaticMesh(); //ClearGizmoScaleMesh();
ClearGizmoMoveStaticMesh(); ClearGizmoMoveMesh();
for(GizmoRenderable &gr:gizmo_rederable) for(GizmoMesh &gr:gizmo_mesh)
{ {
SAFE_CLEAR(gr.prim) SAFE_CLEAR(gr.prim)
SAFE_CLEAR_OBJECT_ARRAY(gr.renderable) SAFE_CLEAR_OBJECT_ARRAY(gr.mesh)
} }
SAFE_CLEAR(gizmo_triangle.prim_creater); SAFE_CLEAR(gizmo_triangle.prim_creater);
@ -306,7 +305,7 @@ void FreeGizmoResource()
SAFE_CLEAR(gizmo_line.vdm); SAFE_CLEAR(gizmo_line.vdm);
} }
Mesh *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color) Mesh *GetGizmoMesh(const GizmoShape &shape,const GizmoColor &color)
{ {
if(!gizmo_rr) if(!gizmo_rr)
return(nullptr); return(nullptr);
@ -314,10 +313,10 @@ Mesh *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color)
RANGE_CHECK_RETURN_NULLPTR(shape) RANGE_CHECK_RETURN_NULLPTR(shape)
RANGE_CHECK_RETURN_NULLPTR(color) RANGE_CHECK_RETURN_NULLPTR(color)
return gizmo_rederable[size_t(shape)].renderable[size_t(color)]; return gizmo_mesh[size_t(shape)].mesh[size_t(color)];
} }
StaticMesh *CreateGizmoStaticMesh(SceneNode *root_node) Mesh *CreateGizmoMesh(SceneNode *root_node)
{ {
if(!root_node) if(!root_node)
return(nullptr); return(nullptr);

View File

@ -36,7 +36,7 @@ constexpr const float GIZMO_CYLINDER_OFFSET =GIZMO_CYLINDER_HALF_LENGTH+GIZM
constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F; ///<二轴调节点偏移量(方片或圆) constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F; ///<二轴调节点偏移量(方片或圆)
Mesh *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &); Mesh *GetGizmoMesh(const GizmoShape &gs,const GizmoColor &);
StaticMeshComponent *CreateGizmoStaticMeshComponent(SceneNode *); StaticMeshComponent *CreateGizmoStaticMeshComponent(SceneNode *);