准备修复Gizmo
This commit is contained in:
parent
a180970eb6
commit
ec4125776a
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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 *);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user