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);
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);
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()
{

View File

@ -169,7 +169,10 @@ namespace hgl
if(!pc->Init("PlaneGrid",((pgci->grid_size.Width()+1)+(pgci->grid_size.Height()+1))*2,0))
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 left =-right;
@ -179,14 +182,14 @@ namespace hgl
for(uint row=0;row<=pgci->grid_size.Height();row++)
{
vertex->WriteLine( Vector3f(left ,top+row,0),
Vector3f(right,top+row,0));
vertex->WriteLine( Vector2f(left ,top+row),
Vector2f(right,top+row));
}
for(uint col=0;col<=pgci->grid_size.Width();col++)
{
vertex->WriteLine(Vector3f(left+col,top, 0),
Vector3f(left+col,bottom,0));
vertex->WriteLine(Vector2f(left+col,top ),
Vector2f(left+col,bottom));
}
VABMap1f lum(pc,VAN::Luminance);

View File

@ -33,10 +33,20 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
{
mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS);
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
{
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
&&cfg->local_to_world)

View File

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