准备开始实现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:
MaterialInstance * material_instance =nullptr;
Mesh * render_obj =nullptr;
Mesh * mesh_triangle =nullptr;
Pipeline * pipeline =nullptr;
@ -79,7 +79,7 @@ private:
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::Color, COLOR_DATA_FORMAT, color_data}
@ -87,9 +87,11 @@ private:
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:

View File

@ -1,4 +1,5 @@
#pragma once
#include"Gizmo.h"
#include<hgl/color/Color.h>
@ -6,7 +7,7 @@ VK_NAMESPACE_BEGIN
class SceneNode;
class PrimitiveCreater;
class StaticMesh;
class StaticMeshComponent;
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 &);
StaticMesh *CreateGizmoStaticMesh(SceneNode *);
StaticMeshComponent *CreateGizmoStaticMeshComponent(SceneNode *);
VK_NAMESPACE_END

View File

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

View File

@ -7,7 +7,19 @@ COMPONENT_NAMESPACE_BEGIN
struct StaticMeshComponentData:public ComponentData
{
Mesh *renderable;
Mesh *mesh;
public:
StaticMeshComponentData()
{
mesh=nullptr;
}
StaticMeshComponentData(Mesh *m)
{
mesh=m;
}
};//struct StaticMeshComponentData
class StaticMeshComponent;
@ -31,9 +43,24 @@ public:
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 StaticMeshComponent:public PrimitiveComponent
@ -42,10 +69,10 @@ class StaticMeshComponent:public PrimitiveComponent
public:
StaticMeshComponent(SceneNode *psn,ComponentData *cd,ComponentManager *cm)
StaticMeshComponent(SceneNode *psn,StaticMeshComponentData *cd,StaticMeshComponentManager *cm)
:PrimitiveComponent(psn,cd,cm)
{
sm_data=reinterpret_cast<StaticMeshComponentData *>(cd);
sm_data=cd;
}
virtual ~StaticMeshComponent()=default;

View File

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

View File

@ -3,20 +3,5 @@
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