Billboard Shader增加可指定正面为顺时针/逆时针
This commit is contained in:
@@ -66,6 +66,8 @@ struct BillboardMaterialCreateConfig:public Material3DCreateConfig
|
|||||||
|
|
||||||
Vector2u pixel_size; ///<像素尺寸
|
Vector2u pixel_size; ///<像素尺寸
|
||||||
|
|
||||||
|
VkFrontFace front_face=VK_FRONT_FACE_CLOCKWISE; ///<正面朝向
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using Material3DCreateConfig::Material3DCreateConfig;
|
using Material3DCreateConfig::Material3DCreateConfig;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include"Std3DMaterial.h"
|
#include"Std3DMaterial.h"
|
||||||
|
#include"S_BillboardVertex.h"
|
||||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
@@ -14,14 +15,6 @@ void main()
|
|||||||
constexpr const char gs_main[]=R"(
|
constexpr const char gs_main[]=R"(
|
||||||
void main()
|
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];
|
mat4 MVPMatrix=camera.vp*l2w.mats[Input[0].l2w_id];
|
||||||
|
|
||||||
for(int i=0;i<4;i++)
|
for(int i=0;i<4;i++)
|
||||||
@@ -48,9 +41,14 @@ void main()
|
|||||||
|
|
||||||
class MaterialBillboard2DDynamicSize:public Std3DMaterial
|
class MaterialBillboard2DDynamicSize:public Std3DMaterial
|
||||||
{
|
{
|
||||||
|
mtl::BillboardMaterialCreateConfig *billboard_config;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using Std3DMaterial::Std3DMaterial;
|
MaterialBillboard2DDynamicSize(mtl::BillboardMaterialCreateConfig *bcfg):Std3DMaterial(bcfg)
|
||||||
|
{
|
||||||
|
billboard_config=bcfg;
|
||||||
|
}
|
||||||
~MaterialBillboard2DDynamicSize()=default;
|
~MaterialBillboard2DDynamicSize()=default;
|
||||||
|
|
||||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||||
@@ -70,6 +68,7 @@ void main()
|
|||||||
|
|
||||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
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);
|
gsc->SetMain(gs_main);
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include"Std3DMaterial.h"
|
#include"Std3DMaterial.h"
|
||||||
|
#include"S_BillboardVertex.h"
|
||||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
@@ -21,14 +22,6 @@ void main()
|
|||||||
constexpr const char gs_main[]=R"(
|
constexpr const char gs_main[]=R"(
|
||||||
void main()
|
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++)
|
for(int i=0;i<4;i++)
|
||||||
{
|
{
|
||||||
gl_Position=gl_in[0].gl_Position;
|
gl_Position=gl_in[0].gl_Position;
|
||||||
@@ -49,9 +42,14 @@ void main()
|
|||||||
|
|
||||||
class MaterialBillboard2DFixedSize:public Std3DMaterial
|
class MaterialBillboard2DFixedSize:public Std3DMaterial
|
||||||
{
|
{
|
||||||
|
mtl::BillboardMaterialCreateConfig *billboard_config;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using Std3DMaterial::Std3DMaterial;
|
MaterialBillboard2DFixedSize(mtl::BillboardMaterialCreateConfig *bcfg):Std3DMaterial(bcfg)
|
||||||
|
{
|
||||||
|
billboard_config=bcfg;
|
||||||
|
}
|
||||||
~MaterialBillboard2DFixedSize()=default;
|
~MaterialBillboard2DFixedSize()=default;
|
||||||
|
|
||||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||||
@@ -71,6 +69,7 @@ void main()
|
|||||||
|
|
||||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
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);
|
gsc->SetMain(gs_main);
|
||||||
return(true);
|
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