准备开始实现StaticMeshComponent

This commit is contained in:
hyzboy 2025-06-12 03:01:50 +08:00
parent 3fd6f98ef7
commit 87c150d1bd
6 changed files with 43 additions and 28 deletions

View File

@ -36,7 +36,7 @@ class TestApp:public WorkObject
private: private:
MaterialInstance * material_instance =nullptr; MaterialInstance * material_instance =nullptr;
Mesh * render_obj =nullptr; Mesh * mesh_triangle =nullptr;
Pipeline * pipeline =nullptr; Pipeline * pipeline =nullptr;
@ -79,7 +79,7 @@ private:
position_data[i][1]=position_data_float[i][1]*ext.height; position_data[i][1]=position_data_float[i][1]*ext.height;
} }
render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline, mesh_triangle=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline,
{ {
{VAN::Position,POSITION_DATA_FORMAT,position_data}, {VAN::Position,POSITION_DATA_FORMAT,position_data},
{VAN::Color, COLOR_DATA_FORMAT, color_data} {VAN::Color, COLOR_DATA_FORMAT, color_data}
@ -87,9 +87,11 @@ private:
SceneNode *scene_root=GetSceneRoot(); ///<取得场景根节点 SceneNode *scene_root=GetSceneRoot(); ///<取得场景根节点
scene_root->Add(new SceneNode(render_obj));
return(render_obj);
scene_root->Add(new SceneNode(mesh_triangle));
return(mesh_triangle);
} }
public: public:

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include"Gizmo.h" #include"Gizmo.h"
#include<hgl/color/Color.h> #include<hgl/color/Color.h>
@ -6,7 +7,7 @@ VK_NAMESPACE_BEGIN
class SceneNode; class SceneNode;
class PrimitiveCreater; class PrimitiveCreater;
class StaticMesh; class StaticMeshComponent;
constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]= constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]=
{ {
@ -37,6 +38,6 @@ constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F;
Mesh *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &); Mesh *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &);
StaticMesh *CreateGizmoStaticMesh(SceneNode *); StaticMeshComponent *CreateGizmoStaticMeshComponent(SceneNode *);
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -103,7 +103,7 @@ public:
public: public:
virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; virtual Component * CreateComponent(ComponentData *)=0;
int GetComponentCount()const{return component_set.GetCount();} int GetComponentCount()const{return component_set.GetCount();}

View File

@ -7,7 +7,19 @@ COMPONENT_NAMESPACE_BEGIN
struct StaticMeshComponentData:public ComponentData struct StaticMeshComponentData:public ComponentData
{ {
Mesh *renderable; Mesh *mesh;
public:
StaticMeshComponentData()
{
mesh=nullptr;
}
StaticMeshComponentData(Mesh *m)
{
mesh=m;
}
};//struct StaticMeshComponentData };//struct StaticMeshComponentData
class StaticMeshComponent; class StaticMeshComponent;
@ -31,9 +43,24 @@ public:
StaticMeshComponentManager()=default; StaticMeshComponentManager()=default;
StaticMeshComponent *CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data); StaticMeshComponent *CreateStaticMeshComponent(StaticMeshComponentData *data)
{
if(!data)return(nullptr);
virtual Component *CreateComponent(SceneNode *psn,ComponentData *data) override; return(new StaticMeshComponent(data));
}
StaticMeshComponent *CreateStaticMeshComponent(Mesh *m)
{
return CreateStaticMeshComponent(new StaticMeshComponentData(m));
}
virtual Component *CreateComponent(ComponentData *data) override
{
if(!data)return(nullptr);
return CreateStaticMeshComponent(reinterpret_cast<StaticMeshComponentData *>(data));
}
};//class StaticMeshComponentManager };//class StaticMeshComponentManager
class StaticMeshComponent:public PrimitiveComponent class StaticMeshComponent:public PrimitiveComponent
@ -42,10 +69,10 @@ class StaticMeshComponent:public PrimitiveComponent
public: public:
StaticMeshComponent(SceneNode *psn,ComponentData *cd,ComponentManager *cm) StaticMeshComponent(SceneNode *psn,StaticMeshComponentData *cd,StaticMeshComponentManager *cm)
:PrimitiveComponent(psn,cd,cm) :PrimitiveComponent(psn,cd,cm)
{ {
sm_data=reinterpret_cast<StaticMeshComponentData *>(cd); sm_data=cd;
} }
virtual ~StaticMeshComponent()=default; virtual ~StaticMeshComponent()=default;

View File

@ -135,7 +135,7 @@ class IndirectDispatchBuffer;
class RenderResource; class RenderResource;
class StaticMesh; class StaticMeshComponent;
class SceneNode; class SceneNode;
class Scene; class Scene;

View File

@ -3,20 +3,5 @@
COMPONENT_NAMESPACE_BEGIN COMPONENT_NAMESPACE_BEGIN
StaticMeshComponent *StaticMeshComponentManager::CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data)
{
if(!psn||!data)return(nullptr);
StaticMeshComponent *smc=new StaticMeshComponent(psn,data,this);
psn->AddComponent(smc);
return smc;
}
Component *StaticMeshComponentManager::CreateComponent(SceneNode *psn,ComponentData *data)
{
return CreateStaticMeshComponent(psn,reinterpret_cast<StaticMeshComponentData *>(data));
}
COMPONENT_NAMESPACE_END COMPONENT_NAMESPACE_END