used 3 colors in BlinnPhongDirectionLight.cpp

This commit is contained in:
hyzboy 2024-03-16 00:20:27 +08:00
parent 89b9735f99
commit 35b7c9651f
3 changed files with 20 additions and 16 deletions

View File

@ -104,7 +104,7 @@ private:
{ {
Add(material_instance,scale(PLANE_SIZE,PLANE_SIZE,1)); Add(material_instance,scale(PLANE_SIZE,PLANE_SIZE,1));
camera->pos=Vector3f(PLANE_SIZE/2,PLANE_SIZE/2,PLANE_SIZE/4); camera->pos=Vector3f(PLANE_SIZE/4,PLANE_SIZE/2,PLANE_SIZE/4);
camera_control->SetTarget(Vector3f(0,0,0)); camera_control->SetTarget(Vector3f(0,0,0));
camera_control->Refresh(); camera_control->Refresh();

View File

@ -10,6 +10,7 @@
#include<hgl/graph/VKVertexAttribBuffer.h> #include<hgl/graph/VKVertexAttribBuffer.h>
#include<hgl/graph/mtl/Material3DCreateConfig.h> #include<hgl/graph/mtl/Material3DCreateConfig.h>
#include<hgl/graph/mtl/BlinnPhong.h> #include<hgl/graph/mtl/BlinnPhong.h>
#include<hgl/color/Color.h>
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
@ -24,6 +25,8 @@ static mtl::blinnphong::SunLight sun_light=
Vector4f(1,0.95,0.9,1) //color Vector4f(1,0.95,0.9,1) //color
}; };
constexpr const COLOR AxisColor[4]={COLOR::Red,COLOR::Green,COLOR::Blue,COLOR::White};
class TestApp:public SceneAppFramework class TestApp:public SceneAppFramework
{ {
private: //plane grid private: //plane grid
@ -40,7 +43,7 @@ private:
private: //sphere private: //sphere
Material * mtl_blinnphong =nullptr; Material * mtl_blinnphong =nullptr;
MaterialInstance * mi_blinnphong =nullptr; MaterialInstance * mi_blinnphong[4]{};
Pipeline * p_blinnphong =nullptr; Pipeline * p_blinnphong =nullptr;
Primitive * prim_sphere =nullptr; Primitive * prim_sphere =nullptr;
@ -89,14 +92,14 @@ private:
mtl_blinnphong->BindUBO(DescriptorSetType::Global,"sun",ubo_sun); mtl_blinnphong->BindUBO(DescriptorSetType::Global,"sun",ubo_sun);
mtl_blinnphong->Update(); mtl_blinnphong->Update();
float mi_data[4]= Color4f mi_data;
for(uint i=0;i<4;i++)
{ {
1,0,0, //color mi_data=GetColor4f(AxisColor[i],4);
4 //gloss
};
mi_blinnphong=db->CreateMaterialInstance(mtl_blinnphong,nullptr,&mi_data); mi_blinnphong[i]=db->CreateMaterialInstance(mtl_blinnphong,nullptr,&mi_data);
if(!mi_blinnphong)return(false); if(!mi_blinnphong[i])return(false);
}
p_blinnphong=CreatePipeline(mtl_blinnphong,InlinePipeline::Solid3D,Prim::Triangles); p_blinnphong=CreatePipeline(mtl_blinnphong,InlinePipeline::Solid3D,Prim::Triangles);
@ -124,7 +127,7 @@ private:
} }
//Sphere //Sphere
prim_sphere=CreateSphere(db,mi_blinnphong->GetVIL(),16); prim_sphere=CreateSphere(db,mi_blinnphong[0]->GetVIL(),16);
//Cone //Cone
{ {
@ -135,7 +138,7 @@ private:
cci.numberSlices=16; //圆锥底部分割数 cci.numberSlices=16; //圆锥底部分割数
cci.numberStacks=8; //圆锥高度分割数 cci.numberStacks=8; //圆锥高度分割数
prim_cone=CreateCone(db,mi_blinnphong->GetVIL(),&cci); prim_cone=CreateCone(db,mi_blinnphong[1]->GetVIL(),&cci);
} }
//Cyliner //Cyliner
@ -146,13 +149,13 @@ private:
cci.numberSlices=16; //圆柱底部分割数 cci.numberSlices=16; //圆柱底部分割数
cci.radius =0.25f; //圆柱半径 cci.radius =0.25f; //圆柱半径
prim_cylinder=CreateCylinder(db,mi_blinnphong->GetVIL(),&cci); prim_cylinder=CreateCylinder(db,mi_blinnphong[2]->GetVIL(),&cci);
} }
return(true); return(true);
} }
Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p,const Matrix4f &mat) Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p,const Matrix4f &mat=Identity4f)
{ {
Renderable *ri=db->CreateRenderable(r,mi,p); Renderable *ri=db->CreateRenderable(r,mi,p);
@ -171,9 +174,10 @@ private:
{ {
Add(prim_plane_grid,mi_plane_grid,p_line,Identity4f); Add(prim_plane_grid,mi_plane_grid,p_line,Identity4f);
Add(prim_sphere, mi_blinnphong,p_blinnphong,translate(Vector3f(0,0,2))); Add(prim_sphere, mi_blinnphong[0],p_blinnphong,translate(Vector3f(0,0,2)));
Add(prim_cone, mi_blinnphong,p_blinnphong,Identity4f);
Add(prim_cylinder, mi_blinnphong,p_blinnphong,translate(Vector3f(0,0,-5))); Add(prim_cone, mi_blinnphong[1],p_blinnphong);
Add(prim_cylinder, mi_blinnphong[2],p_blinnphong,translate(Vector3f(0,0,-5)));
camera->pos=Vector3f(32,32,32); camera->pos=Vector3f(32,32,32);
camera_control->SetTarget(Vector3f(0,0,0)); camera_control->SetTarget(Vector3f(0,0,0));