From 3fbbdb82042be9193323a3cfc0a832840a5a1527 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Sat, 18 Jun 2022 18:47:08 +0800 Subject: [PATCH] added few codes, but they can't run. --- example/Vulkan/CMakeLists.txt | 10 +- example/Vulkan/FullScreenRect.cpp | 0 example/Vulkan/InstanceCube.cpp | 4 + example/Vulkan/SceneTree.cpp | 7 +- example/Vulkan/TerrainSimple.cpp | 168 ++++++++++++++++++++++++++++++ 5 files changed, 182 insertions(+), 7 deletions(-) create mode 100644 example/Vulkan/FullScreenRect.cpp create mode 100644 example/Vulkan/InstanceCube.cpp create mode 100644 example/Vulkan/TerrainSimple.cpp diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index f7cdc8d5..22ba60f5 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -28,11 +28,13 @@ CreateProject(00.triangle first_triangle.cpp) CreateProject(01.two_triangle two_triangle.cpp) CreateProject(02.FragCoord FragCoordTest.cpp) CreateProject(03.indices_rect indices_rect.cpp) -CreateProject(04.TextureFormat TextureFormat.cpp) -CreateProject(05.texture_rect texture_rect.cpp) +CreateProject(04.FullScreenRect FullScreenRect.cpp) + +CreateProject(05.TextureFormat TextureFormat.cpp) +CreateProject(06.texture_rect texture_rect.cpp) #CreateProject(05.HQFilterTexture HQFilterTexture.cpp) #CreateProject(06.Geometry2D Geometry2D.cpp) -CreateProject(06.Geometry3D Geometry3D.cpp) +CreateProject(07.Geometry3D Geometry3D.cpp) CreateProject(08.SceneTree SceneTree.cpp) #CreateProject(09.LoadStaticMesh LoadStaticMesh.cpp LoadScene.cpp) CreateProject(10.InlineGeometryScene InlineGeometryScene.cpp) @@ -55,3 +57,5 @@ CreateProject(16.DeferredRender DeferredRender.cpp) CreateProject(17.Cubemap Cubemap.cpp) CreateProject(17.EquirectangularMap EquirectangularMap.cpp) CreateProject(18.RayPicking RayPicking.cpp) +CreateProject(19.InstanceCube InstanceCube.cpp) +CreateProject(20.TerrainSimple TerrainSimple.cpp) \ No newline at end of file diff --git a/example/Vulkan/FullScreenRect.cpp b/example/Vulkan/FullScreenRect.cpp new file mode 100644 index 00000000..e69de29b diff --git a/example/Vulkan/InstanceCube.cpp b/example/Vulkan/InstanceCube.cpp new file mode 100644 index 00000000..9e4ad73b --- /dev/null +++ b/example/Vulkan/InstanceCube.cpp @@ -0,0 +1,4 @@ +// Instance Cube + +// 基本的Instance绘制测试用例 + diff --git a/example/Vulkan/SceneTree.cpp b/example/Vulkan/SceneTree.cpp index dba218a4..ca93f5f7 100644 --- a/example/Vulkan/SceneTree.cpp +++ b/example/Vulkan/SceneTree.cpp @@ -1,5 +1,5 @@ 锘// SceneTree -// 鐢ㄤ簬娴嬭瘯鏍戝舰鎺掑垪鐨勫満鏅腑锛屾瘡涓绾ц妭鐐瑰鍙樻崲鐭╅樀鐨勫鐞嗘槸鍚︽纭,浠ュ強Instance缁樺埗 +// 鐢ㄤ簬娴嬭瘯鏍戝舰鎺掑垪鐨勫満鏅腑锛屾瘡涓绾ц妭鐐瑰鍙樻崲鐭╅樀鐨勫鐞嗘槸鍚︽纭 #include"VulkanAppFramework.h" #include @@ -56,7 +56,7 @@ private: bool InitMaterial() { - material=db->CreateMaterial(OS_TEXT("res/material/SimplestDirectionLight")); + material=db->CreateMaterial(OS_TEXT("res/material/PhongFullyRough")); if(!material) return(false); @@ -95,7 +95,6 @@ private: } BindCameraUBO(material_instance); - return(true); } @@ -126,7 +125,7 @@ private: count=(rand()%16)+1; for(uint n=0;nCreateSubNode(translate(0,0,size*n*1.01),ri); + cur_node->CreateSubNode(translate(0,0,size*n*1.1),ri); } render_root.RefreshMatrix(); diff --git a/example/Vulkan/TerrainSimple.cpp b/example/Vulkan/TerrainSimple.cpp new file mode 100644 index 00000000..3e18e29b --- /dev/null +++ b/example/Vulkan/TerrainSimple.cpp @@ -0,0 +1,168 @@ +// 最简单的地形渲染 +// 在CPU端生成网格,在vertex中取样高度图 + +#include"VulkanAppFramework.h" +#include +#include +#include +#include +#include + +using namespace hgl; +using namespace hgl::graph; + +constexpr uint32_t SCREEN_WIDTH=1280; +constexpr uint32_t SCREEN_HEIGHT=720; + + struct TerrainCreateInfo + { + uint Xcount; ///CreateMaterial(OS_TEXT("res/material/VertexColor3D")); + if(!material)return(false); + + material_instance=db->CreateMaterialInstance(material); + if(!material_instance)return(false); + + pipeline=CreatePipeline(material_instance,InlinePipeline::Solid3D,Prim::TriangleStrip); + if(!pipeline) + return(false); + + return(true); + } + + RenderableInstance *Add(Renderable *r,const Matrix4f &mat) + { + RenderableInstance *ri=db->CreateRenderableInstance(r,material_instance,pipeline); + + render_root.CreateSubNode(mat,ri); + + return ri; + } + + void CreateRenderObject() + { + struct PlaneGridCreateInfo pgci; + + pgci.coord[0]=Vector3f(-100,-100,0); + pgci.coord[1]=Vector3f( 100,-100,0); + pgci.coord[2]=Vector3f( 100, 100,0); + pgci.coord[3]=Vector3f(-100, 100,0); + + pgci.step.x=32; + pgci.step.y=32; + + pgci.side_step.x=8; + pgci.side_step.y=8; + + pgci.color.Set(0.75,0.75,0.75); + pgci.side_color.Set(1,0,0,1); + + const VAB *vab=material_instance->GetVAB(); + + renderable=CreateRenderablePlaneGrid(db,vab,&pgci); + } + + bool InitScene() + { + RenderableInstance *ri=db->CreateRenderableInstance(renderable,material_instance,pipeline); + + render_root.CreateSubNode(ri); + + camera->pos=Vector3f(200,200,200); + camera_control->SetTarget(Vector3f(0,0,0)); + camera_control->Refresh(); + + render_root.RefreshMatrix(); + render_list->Expend(camera->info,&render_root); + + return(true); + } + +public: + + ~TestApp() + { + SAFE_CLEAR(render_list); + } + + bool Init() + { + if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) + return(false); + + render_list=new RenderList(device); + + if(!InitMDP()) + return(false); + + CreateRenderObject(); + + if(!InitScene()) + return(false); + + return(true); + } + + void BuildCommandBuffer(uint32 index) + { + render_root.RefreshMatrix(); + render_list->Expend(GetCameraInfo(),&render_root); + + VulkanApplicationFramework::BuildCommandBuffer(index,render_list); + } + + void Resize(int w,int h)override + { + CameraAppFramework::Resize(w,h); + + VulkanApplicationFramework::BuildCommandBuffer(render_list); + } +};//class TestApp:public CameraAppFramework + +int main(int,char **) +{ + TestApp app; + + if(!app.Init()) + return(-1); + + while(app.Run()); + + return 0; +}