使用 HLSL 几何着色器对二十面体进行多重细分
目前,我正在使用以下几何着色器对二十面体进行一次细分:
[maxvertexcount(8)]
void gs(triangle VS_OUT gin[3], inout TriangleStream<GS_OUT> s)
{
// p1
// / \
// / \
// m0 --- m1
// / \ / \
// / \ / \
// p0 -- m2 -- p2
float3 m0 = .5f * (gin[0].pos_l + gin[1].pos_l),
m1 = .5f * (gin[2].pos_l + gin[1].pos_l),
m2 = .5f * (gin[0].pos_l + gin[2].pos_l);
float3 v[6];
v[0] = gin[0].pos_l;
v[1] = m0;
v[2] = m2;
v[3] = m1;
v[4] = gin[2].pos_l;
v[5] = gin[1].pos_l;
GS_OUT gout;
for (int i = 0; i < 5; ++i)
{
gout.pos_h = mul(float4(v[i], 1.f), g_mat_wvp);
s.Append(gout);
}
s.RestartStrip();
gout.pos_h = mul(float4(v[1], 1.f), g_mat_wvp);
s.Append(gout);
gout.pos_h = mul(float4(v[5], 1.f), g_mat_wvp);
s.Append(gout);
gout.pos_h = mul(float4(v[3], 1.f), g_mat_wvp);
s.Append(gout);
}
但是,我想指定细分级别。是否有可能使用输出的顶点再次调用着色器,或者我是否需要采用其他方法?
Currently I'm subdividing an icosahedron once by using the following Geometry Shader:
[maxvertexcount(8)]
void gs(triangle VS_OUT gin[3], inout TriangleStream<GS_OUT> s)
{
// p1
// / \
// / \
// m0 --- m1
// / \ / \
// / \ / \
// p0 -- m2 -- p2
float3 m0 = .5f * (gin[0].pos_l + gin[1].pos_l),
m1 = .5f * (gin[2].pos_l + gin[1].pos_l),
m2 = .5f * (gin[0].pos_l + gin[2].pos_l);
float3 v[6];
v[0] = gin[0].pos_l;
v[1] = m0;
v[2] = m2;
v[3] = m1;
v[4] = gin[2].pos_l;
v[5] = gin[1].pos_l;
GS_OUT gout;
for (int i = 0; i < 5; ++i)
{
gout.pos_h = mul(float4(v[i], 1.f), g_mat_wvp);
s.Append(gout);
}
s.RestartStrip();
gout.pos_h = mul(float4(v[1], 1.f), g_mat_wvp);
s.Append(gout);
gout.pos_h = mul(float4(v[5], 1.f), g_mat_wvp);
s.Append(gout);
gout.pos_h = mul(float4(v[3], 1.f), g_mat_wvp);
s.Append(gout);
}
However, I want to specify the subdivision level. Is there any possibility to call the Shader again with the outputed verticies or do I need to follow an other approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已经通过以下方式解决了它:
I've solved it in the following way: