PlaneGrid use 2d position format instead of 3d.

This commit is contained in:
hyzboy 2024-06-02 20:15:56 +08:00
parent c1d54628d1
commit cd4733a491
5 changed files with 38 additions and 76 deletions

View File

@ -28,8 +28,9 @@ private:
mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines); mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines);
cfg.local_to_world=true; cfg.local_to_world=true;
cfg.position_format=VAT_VEC2;
material=db->LoadMaterial("Std3D/VertexLum3D",&cfg); material=db->LoadMaterial("Std3D/VertexLum2D",&cfg);
if(!material)return(false); if(!material)return(false);
Color4f GridColor; Color4f GridColor;

View File

@ -155,7 +155,7 @@ public:
} }
} }
const bool IsValid()const{ return map_ptr?map_ptr:false; } const bool IsValid()const{ return map_ptr; }
void Restart() void Restart()
{ {

View File

@ -169,7 +169,10 @@ namespace hgl
if(!pc->Init("PlaneGrid",((pgci->grid_size.Width()+1)+(pgci->grid_size.Height()+1))*2,0)) if(!pc->Init("PlaneGrid",((pgci->grid_size.Width()+1)+(pgci->grid_size.Height()+1))*2,0))
return(nullptr); return(nullptr);
VABMap3f vertex(pc,VAN::Position); VABMap2f vertex(pc,VAN::Position);
if(!vertex.IsValid())
return(nullptr);
const float right=float(pgci->grid_size.Width())/2.0f; const float right=float(pgci->grid_size.Width())/2.0f;
const float left =-right; const float left =-right;
@ -179,14 +182,14 @@ namespace hgl
for(uint row=0;row<=pgci->grid_size.Height();row++) for(uint row=0;row<=pgci->grid_size.Height();row++)
{ {
vertex->WriteLine( Vector3f(left ,top+row,0), vertex->WriteLine( Vector2f(left ,top+row),
Vector3f(right,top+row,0)); Vector2f(right,top+row));
} }
for(uint col=0;col<=pgci->grid_size.Width();col++) for(uint col=0;col<=pgci->grid_size.Width();col++)
{ {
vertex->WriteLine(Vector3f(left+col,top, 0), vertex->WriteLine(Vector2f(left+col,top ),
Vector3f(left+col,bottom,0)); Vector2f(left+col,bottom));
} }
VABMap1f lum(pc,VAN::Luminance); VABMap1f lum(pc,VAN::Luminance);

View File

@ -33,10 +33,20 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
{ {
mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS); mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS);
vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCamera:func::GetPosition3DL2W); if(cfg->position_format.vec_size==3)
vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCamera:func::GetPosition3DL2W);
else
if(cfg->position_format.vec_size==2)
vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCameraBy2D:func::GetPosition3DL2WBy2D);
} }
else else
vsc->AddFunction(cfg->camera?func::GetPosition3DCamera:func::GetPosition3D); {
if(cfg->position_format.vec_size==3)
vsc->AddFunction(cfg->camera?func::GetPosition3DCamera:func::GetPosition3D);
else
if(cfg->position_format.vec_size==2)
vsc->AddFunction(cfg->camera?func::GetPosition3DCameraBy2D:func::GetPosition3DBy2D);
}
if(cfg->camera if(cfg->camera
&&cfg->local_to_world) &&cfg->local_to_world)

View File

@ -1,4 +1,4 @@
#pragma once #pragma once
#include<hgl/graph/mtl/StdMaterial.h> #include<hgl/graph/mtl/StdMaterial.h>
#include<hgl/graph/CoordinateSystem.h> #include<hgl/graph/CoordinateSystem.h>
@ -7,78 +7,26 @@ namespace func
{ {
constexpr const char *GetPosition2D[size_t(CoordinateSystem2D::RANGE_SIZE)]= constexpr const char *GetPosition2D[size_t(CoordinateSystem2D::RANGE_SIZE)]=
{ {
R"( "vec4 GetPosition2D(){return vec4(Position,0,1);}", //NDC
vec4 GetPosition2D() "vec4 GetPosition2D(){return vec4(Position.xy*2-1,0,1);}", //ZeroToOne
{ "vec4 GetPosition2D(){return viewport.ortho_matrix*vec4(Position,0,1);}" //Ortho
return vec4(Position,0,1);
}
)",
R"(
vec4 GetPosition2D()
{
return vec4(Position.xy*2-1,0,1);
}
)",
R"(
vec4 GetPosition2D()
{
return viewport.ortho_matrix*vec4(Position,0,1);
}
)"
}; };
constexpr const char *GetPosition2DL2W[size_t(CoordinateSystem2D::RANGE_SIZE)]= constexpr const char *GetPosition2DL2W[size_t(CoordinateSystem2D::RANGE_SIZE)]=
{ {
R"( "vec4 GetPosition2D(){return GetLocalToWorld()*vec4(Position,0,1);}", //NDC
vec4 GetPosition2D() "vec4 GetPosition2D(){return GetLocalToWorld()*vec4(Position.xy*2-1,0,1);}", //ZeroToOne
{ "vec4 GetPosition2D(){return GetLocalToWorld()*viewport.ortho_matrix*vec4(Position,0,1);}" //Ortho
return GetLocalToWorld()*vec4(Position,0,1);
}
)",
R"(
vec4 GetPosition2D()
{
return GetLocalToWorld()*vec4(Position.xy*2-1,0,1);
}
)",
R"(
vec4 GetPosition2D()
{
return GetLocalToWorld()*viewport.ortho_matrix*vec4(Position,0,1);
}
)"
}; };
constexpr const char *GetPosition3D=R"( constexpr const char *GetPosition3D ="vec4 GetPosition3D(){return vec4(Position,1);}";
vec4 GetPosition3D() constexpr const char *GetPosition3DL2W ="vec4 GetPosition3D(){return GetLocalToWorld()*vec4(Position,1);}";
{ constexpr const char *GetPosition3DCamera ="vec4 GetPosition3D(){return camera.vp*vec4(Position,1);}";
return vec4(Position,1); constexpr const char *GetPosition3DL2WCamera ="vec4 GetPosition3D(){return camera.vp*GetLocalToWorld()*vec4(Position,1);}";
}
)";
constexpr const char *GetPosition3DL2W=R"( constexpr const char *GetPosition3DBy2D ="vec4 GetPosition3D(){return vec4(Position,0,1);}";
vec4 GetPosition3D() constexpr const char *GetPosition3DL2WBy2D ="vec4 GetPosition3D(){return GetLocalToWorld()*vec4(Position,0,1);}";
{ constexpr const char *GetPosition3DCameraBy2D ="vec4 GetPosition3D(){return camera.vp*vec4(Position,0,1);}";
return GetLocalToWorld()*vec4(Position,1); constexpr const char *GetPosition3DL2WCameraBy2D="vec4 GetPosition3D(){return camera.vp*GetLocalToWorld()*vec4(Position,0,1);}";
}
)";
constexpr const char *GetPosition3DCamera=R"(
vec4 GetPosition3D()
{
return camera.vp*vec4(Position,1);
}
)";
constexpr const char *GetPosition3DL2WCamera=R"(
vec4 GetPosition3D()
{
return camera.vp*GetLocalToWorld()*vec4(Position,1);
}
)";
}//namespace func }//namespace func
STD_MTL_NAMESPACE_END STD_MTL_NAMESPACE_END