Gizmo改成使用OverrideMaterial设置颜色
This commit is contained in:
2
CMCore
2
CMCore
Submodule CMCore updated: a38866694c...25060b07d0
Submodule CMPlatform updated: bc5623e462...ea52f06e72
@@ -35,7 +35,8 @@ enum class GizmoShape:uint
|
|||||||
bool InitGizmoResource(RenderFramework *);
|
bool InitGizmoResource(RenderFramework *);
|
||||||
void FreeGizmoResource();
|
void FreeGizmoResource();
|
||||||
|
|
||||||
ComponentDataPtr GetGizmoMeshCDP(const GizmoShape &shape,const GizmoColor &color);
|
MaterialInstance *GetGizmoMI(const GizmoColor &);
|
||||||
|
ComponentDataPtr GetGizmoMeshCDP(const GizmoShape &shape);
|
||||||
|
|
||||||
SceneNode *GetGizmoMoveNode();
|
SceneNode *GetGizmoMoveNode();
|
||||||
//SceneNode *GetGizmoScaleMesh();
|
//SceneNode *GetGizmoScaleMesh();
|
||||||
|
@@ -71,40 +71,25 @@ namespace
|
|||||||
|
|
||||||
bool Init(RenderFramework *render_framework)
|
bool Init(RenderFramework *render_framework)
|
||||||
{
|
{
|
||||||
ComponentDataPtr sphere_ptr=GetGizmoMeshCDP(GizmoShape::Sphere,GizmoColor::White);
|
ComponentDataPtr SpherePtr =GetGizmoMeshCDP(GizmoShape::Sphere);
|
||||||
|
ComponentDataPtr CylinderPtr=GetGizmoMeshCDP(GizmoShape::Cylinder);
|
||||||
|
ComponentDataPtr ConePtr =GetGizmoMeshCDP(GizmoShape::Cone);
|
||||||
|
ComponentDataPtr SquarePtr =GetGizmoMeshCDP(GizmoShape::Square);
|
||||||
|
|
||||||
#define GET_GIZMO_MESH_CDP(shape) ComponentDataPtr shape##Ptr[3]{ \
|
if(!SpherePtr )return(false);
|
||||||
GetGizmoMeshCDP(GizmoShape::shape,GizmoColor::Red), \
|
if(!CylinderPtr )return(false);
|
||||||
GetGizmoMeshCDP(GizmoShape::shape,GizmoColor::Green), \
|
if(!ConePtr )return(false);
|
||||||
GetGizmoMeshCDP(GizmoShape::shape,GizmoColor::Blue) \
|
if(!SquarePtr )return(false);
|
||||||
};
|
|
||||||
|
|
||||||
GET_GIZMO_MESH_CDP(Cylinder)
|
|
||||||
GET_GIZMO_MESH_CDP(Cone)
|
|
||||||
GET_GIZMO_MESH_CDP(Square)
|
|
||||||
|
|
||||||
if(!sphere_ptr)
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
for(int i=0;i<3;i++)
|
|
||||||
{
|
|
||||||
if(!CylinderPtr[i])
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!ConePtr[i])
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!SquarePtr[i])
|
|
||||||
return(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
CreateComponentInfo cci(this);
|
CreateComponentInfo cci(this);
|
||||||
|
|
||||||
sphere=render_framework->CreateComponent<MeshComponent>(&cci,sphere_ptr);
|
sphere=render_framework->CreateComponent<MeshComponent>(&cci,SpherePtr); //中心球
|
||||||
|
sphere->SetOverrideMaterial(GetGizmoMI(GizmoColor::White)); //白色
|
||||||
|
|
||||||
{
|
{
|
||||||
Transform tm;
|
Transform tm;
|
||||||
GizmoMoveAxis *gma;
|
GizmoMoveAxis *gma;
|
||||||
|
MaterialInstance *mi=nullptr;
|
||||||
|
|
||||||
const Vector3f one_scale(1);
|
const Vector3f one_scale(1);
|
||||||
const Vector3f square_scale(2);
|
const Vector3f square_scale(2);
|
||||||
@@ -112,61 +97,73 @@ namespace
|
|||||||
|
|
||||||
{
|
{
|
||||||
gma=axis+size_t(AXIS::Z);
|
gma=axis+size_t(AXIS::Z);
|
||||||
|
mi=GetGizmoMI(GizmoColor::Blue);
|
||||||
|
|
||||||
tm.SetScale(cylinder_scale);
|
tm.SetScale(cylinder_scale);
|
||||||
tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET);
|
tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr[2]); //Z 向上圆柱
|
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr); //Z 向上圆柱
|
||||||
|
gma->cylinder->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(one_scale);
|
tm.SetScale(one_scale);
|
||||||
tm.SetTranslation(0,0,GIZMO_CONE_OFFSET);
|
tm.SetTranslation(0,0,GIZMO_CONE_OFFSET);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr[2]); //Z 向上圆锥
|
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr); //Z 向上圆锥
|
||||||
|
gma->cone->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(square_scale);
|
tm.SetScale(square_scale);
|
||||||
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET,0);
|
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET,0);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr[2]);
|
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr);
|
||||||
|
gma->square->SetOverrideMaterial(mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gma=axis+size_t(AXIS::X);
|
gma=axis+size_t(AXIS::X);
|
||||||
|
mi=GetGizmoMI(GizmoColor::Red);
|
||||||
|
|
||||||
tm.SetScale(cylinder_scale);
|
tm.SetScale(cylinder_scale);
|
||||||
tm.SetRotation(AxisVector::Y,90);
|
tm.SetRotation(AxisVector::Y,90);
|
||||||
tm.SetTranslation(GIZMO_CYLINDER_OFFSET,0,0);
|
tm.SetTranslation(GIZMO_CYLINDER_OFFSET,0,0);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr[0]); //X 向右圆柱
|
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr); //X 向右圆柱
|
||||||
|
gma->cylinder->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(one_scale);
|
tm.SetScale(one_scale);
|
||||||
tm.SetTranslation(GIZMO_CONE_OFFSET,0,0);
|
tm.SetTranslation(GIZMO_CONE_OFFSET,0,0);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr[0]); //X 向右圆锥
|
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr); //Z 向上圆锥
|
||||||
|
gma->cone->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(square_scale);
|
tm.SetScale(square_scale);
|
||||||
tm.SetTranslation(0,GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET);
|
tm.SetTranslation(0,GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr[0]);
|
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr);
|
||||||
|
gma->square->SetOverrideMaterial(mi);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gma=axis+size_t(AXIS::Y);
|
gma=axis+size_t(AXIS::Y);
|
||||||
|
mi=GetGizmoMI(GizmoColor::Green);
|
||||||
|
|
||||||
tm.SetScale(cylinder_scale);
|
tm.SetScale(cylinder_scale);
|
||||||
tm.SetRotation(AxisVector::X,-90);
|
tm.SetRotation(AxisVector::X,-90);
|
||||||
tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0);
|
tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr[1]); //Y 向前圆柱
|
gma->cylinder=render_framework->CreateComponent<MeshComponent>(&cci,CylinderPtr); //X 向右圆柱
|
||||||
|
gma->cylinder->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(one_scale);
|
tm.SetScale(one_scale);
|
||||||
tm.SetTranslation(0,GIZMO_CONE_OFFSET,0);
|
tm.SetTranslation(0,GIZMO_CONE_OFFSET,0);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr[1]); //Y 向前圆锥
|
gma->cone=render_framework->CreateComponent<MeshComponent>(&cci,ConePtr); //Z 向上圆锥
|
||||||
|
gma->cone->SetOverrideMaterial(mi);
|
||||||
|
|
||||||
tm.SetScale(square_scale);
|
tm.SetScale(square_scale);
|
||||||
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,0,GIZMO_TWO_AXIS_OFFSET);
|
tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,0,GIZMO_TWO_AXIS_OFFSET);
|
||||||
cci.mat=tm;
|
cci.mat=tm;
|
||||||
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr[1]);
|
gma->square=render_framework->CreateComponent<MeshComponent>(&cci,SquarePtr);
|
||||||
|
gma->square->SetOverrideMaterial(mi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,11 +28,11 @@ namespace
|
|||||||
{
|
{
|
||||||
static RenderFramework *render_framework=nullptr;
|
static RenderFramework *render_framework=nullptr;
|
||||||
static RenderResource * gizmo_rr=nullptr;
|
static RenderResource * gizmo_rr=nullptr;
|
||||||
|
static MaterialInstance *gizmo_mi[size_t(GizmoColor::RANGE_SIZE)]{};
|
||||||
|
|
||||||
struct GizmoResource
|
struct GizmoResource
|
||||||
{
|
{
|
||||||
Material * mtl;
|
Material * mtl;
|
||||||
MaterialInstance * mi[size_t(GizmoColor::RANGE_SIZE)];
|
|
||||||
Pipeline * pipeline;
|
Pipeline * pipeline;
|
||||||
VertexDataManager * vdm;
|
VertexDataManager * vdm;
|
||||||
|
|
||||||
@@ -46,21 +46,9 @@ namespace
|
|||||||
{
|
{
|
||||||
Primitive *prim;
|
Primitive *prim;
|
||||||
|
|
||||||
struct
|
Mesh *mesh;
|
||||||
{
|
MeshComponentData *mcd;
|
||||||
Mesh *mesh;
|
ComponentDataPtr cdp;
|
||||||
MeshComponentData *mcd;
|
|
||||||
ComponentDataPtr cdp;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
void Create(Primitive *prim,MaterialInstance *mi,Pipeline *ppl)
|
|
||||||
{
|
|
||||||
mesh=CreateMesh(prim,mi,ppl);
|
|
||||||
mcd=new MeshComponentData(mesh);
|
|
||||||
cdp=mcd;
|
|
||||||
}
|
|
||||||
}mesh_data[size_t(GizmoColor::RANGE_SIZE)];
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -68,19 +56,16 @@ namespace
|
|||||||
{
|
{
|
||||||
prim=p;
|
prim=p;
|
||||||
|
|
||||||
for(uint i=0;i<uint(GizmoColor::RANGE_SIZE);i++)
|
mesh=CreateMesh(prim,gizmo_mi[0],gizmo_triangle.pipeline);
|
||||||
mesh_data[i].Create(prim,gizmo_triangle.mi[i],gizmo_triangle.pipeline);
|
mcd=new MeshComponentData(mesh);
|
||||||
|
cdp=mcd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
|
SAFE_CLEAR(mesh);
|
||||||
|
cdp.unref();
|
||||||
SAFE_CLEAR(prim)
|
SAFE_CLEAR(prim)
|
||||||
|
|
||||||
for(auto &md:mesh_data)
|
|
||||||
{
|
|
||||||
md.cdp.unref();
|
|
||||||
SAFE_CLEAR(md.mesh);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};//class GizmoMesh
|
};//class GizmoMesh
|
||||||
|
|
||||||
@@ -105,8 +90,9 @@ namespace
|
|||||||
{
|
{
|
||||||
color=GetColor4f(gizmo_color[i],1.0);
|
color=GetColor4f(gizmo_color[i],1.0);
|
||||||
|
|
||||||
gr->mi[i]=gizmo_rr->CreateMaterialInstance(gr->mtl,nullptr,&color);
|
gizmo_mi[i]=gizmo_rr->CreateMaterialInstance(gr->mtl,nullptr,&color);
|
||||||
if(!gr->mi[i])
|
|
||||||
|
if(!gizmo_mi[i])
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,15 +324,21 @@ void FreeGizmoResource()
|
|||||||
SAFE_CLEAR(gizmo_line.vdm);
|
SAFE_CLEAR(gizmo_line.vdm);
|
||||||
}
|
}
|
||||||
|
|
||||||
ComponentDataPtr GetGizmoMeshCDP(const GizmoShape &shape,const GizmoColor &color)
|
MaterialInstance *GetGizmoMI(const GizmoColor &color)
|
||||||
|
{
|
||||||
|
RANGE_CHECK_RETURN_NULLPTR(color)
|
||||||
|
|
||||||
|
return gizmo_mi[size_t(color)];
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentDataPtr GetGizmoMeshCDP(const GizmoShape &shape)
|
||||||
{
|
{
|
||||||
if(!gizmo_rr)
|
if(!gizmo_rr)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
RANGE_CHECK_RETURN_NULLPTR(shape)
|
RANGE_CHECK_RETURN_NULLPTR(shape)
|
||||||
RANGE_CHECK_RETURN_NULLPTR(color)
|
|
||||||
|
|
||||||
return gizmo_mesh[size_t(shape)].mesh_data[size_t(color)].cdp;
|
return gizmo_mesh[size_t(shape)].cdp;
|
||||||
}
|
}
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@@ -11,8 +11,8 @@ class MeshComponent;
|
|||||||
|
|
||||||
constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]=
|
constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]=
|
||||||
{
|
{
|
||||||
COLOR::MozillaCharcoal,
|
COLOR::MozillaCharcoal, ///<黑色
|
||||||
COLOR::BlanchedAlmond,
|
COLOR::AntiqueWhite, ///<白色
|
||||||
|
|
||||||
COLOR::BlenderAxisRed,
|
COLOR::BlenderAxisRed,
|
||||||
COLOR::BlenderAxisGreen,
|
COLOR::BlenderAxisGreen,
|
||||||
|
Reference in New Issue
Block a user