Billboard Shader增加可指定正面为顺时针/逆时针
This commit is contained in:
@@ -66,6 +66,8 @@ struct BillboardMaterialCreateConfig:public Material3DCreateConfig
|
||||
|
||||
Vector2u pixel_size; ///<像素尺寸
|
||||
|
||||
VkFrontFace front_face=VK_FRONT_FACE_CLOCKWISE; ///<正面朝向
|
||||
|
||||
public:
|
||||
|
||||
using Material3DCreateConfig::Material3DCreateConfig;
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include"Std3DMaterial.h"
|
||||
#include"S_BillboardVertex.h"
|
||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
@@ -14,14 +15,6 @@ void main()
|
||||
constexpr const char gs_main[]=R"(
|
||||
void main()
|
||||
{
|
||||
const vec2 BillboardVertex[4]=vec2[]
|
||||
(
|
||||
vec2(-0.5,-0.5),
|
||||
vec2( 0.5,-0.5),
|
||||
vec2(-0.5, 0.5),
|
||||
vec2( 0.5, 0.5)
|
||||
);
|
||||
|
||||
mat4 MVPMatrix=camera.vp*l2w.mats[Input[0].l2w_id];
|
||||
|
||||
for(int i=0;i<4;i++)
|
||||
@@ -48,9 +41,14 @@ void main()
|
||||
|
||||
class MaterialBillboard2DDynamicSize:public Std3DMaterial
|
||||
{
|
||||
mtl::BillboardMaterialCreateConfig *billboard_config;
|
||||
|
||||
public:
|
||||
|
||||
using Std3DMaterial::Std3DMaterial;
|
||||
MaterialBillboard2DDynamicSize(mtl::BillboardMaterialCreateConfig *bcfg):Std3DMaterial(bcfg)
|
||||
{
|
||||
billboard_config=bcfg;
|
||||
}
|
||||
~MaterialBillboard2DDynamicSize()=default;
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
@@ -70,6 +68,7 @@ void main()
|
||||
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->AddUserData(billboard_config->front_face==VK_FRONT_FACE_CLOCKWISE?shader_billboard_vertex_cw:shader_billboard_vertex_ccw);
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include"Std3DMaterial.h"
|
||||
#include"S_BillboardVertex.h"
|
||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
@@ -21,14 +22,6 @@ void main()
|
||||
constexpr const char gs_main[]=R"(
|
||||
void main()
|
||||
{
|
||||
const vec2 BillboardVertex[4]=vec2[]
|
||||
(
|
||||
vec2(-0.5,-0.5),
|
||||
vec2(-0.5, 0.5),
|
||||
vec2( 0.5,-0.5),
|
||||
vec2( 0.5, 0.5)
|
||||
);
|
||||
|
||||
for(int i=0;i<4;i++)
|
||||
{
|
||||
gl_Position=gl_in[0].gl_Position;
|
||||
@@ -49,9 +42,14 @@ void main()
|
||||
|
||||
class MaterialBillboard2DFixedSize:public Std3DMaterial
|
||||
{
|
||||
mtl::BillboardMaterialCreateConfig *billboard_config;
|
||||
|
||||
public:
|
||||
|
||||
using Std3DMaterial::Std3DMaterial;
|
||||
MaterialBillboard2DFixedSize(mtl::BillboardMaterialCreateConfig *bcfg):Std3DMaterial(bcfg)
|
||||
{
|
||||
billboard_config=bcfg;
|
||||
}
|
||||
~MaterialBillboard2DFixedSize()=default;
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
@@ -71,6 +69,7 @@ void main()
|
||||
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->AddUserData(billboard_config->front_face==VK_FRONT_FACE_CLOCKWISE?shader_billboard_vertex_cw:shader_billboard_vertex_ccw);
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
}
|
||||
|
28
src/ShaderGen/3d/S_BillboardVertex.h
Normal file
28
src/ShaderGen/3d/S_BillboardVertex.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include<hgl/graph/mtl/StdMaterial.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
|
||||
// 注意:走的几何Shader,输出是三角形条
|
||||
|
||||
constexpr const char shader_billboard_vertex_ccw[]=R"(
|
||||
const vec2 BillboardVertex[4]=vec2[]
|
||||
(
|
||||
vec2(-0.5,-0.5),
|
||||
vec2(-0.5, 0.5),
|
||||
vec2( 0.5,-0.5),
|
||||
vec2( 0.5, 0.5)
|
||||
);
|
||||
)";
|
||||
|
||||
constexpr const char shader_billboard_vertex_cw[]=R"(
|
||||
const vec2 BillboardVertex[4]=vec2[]
|
||||
(
|
||||
vec2(-0.5,-0.5),
|
||||
vec2( 0.5,-0.5),
|
||||
vec2(-0.5, 0.5),
|
||||
vec2( 0.5, 0.5)
|
||||
);
|
||||
)";
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
Reference in New Issue
Block a user