一、前言
通过hull shader的转换控制点和UV坐标生成表面几何,对于固定的细分曲面生成的点都将调用Domain Shader, 输入为:UV[W]坐标,已经Hull Shader的所有输出数据
二、定义Domain 属性
[domain("quad")] // 四边形
三、通过domain定位 Hull上的位置
- 对于四边形的patch,使用float2
- 对于三重曲面patch,使用float3(用于重心坐标)
- 对于isoline,使用float2
float2 UV : SV_DomainLocation
四、定义其他的输入--来自hull shader 由用户定义,包括每个patch的输入控制点(1~32个),输出常量patch数据
const OutputPatch<BEZIER_CONTROL_POINT, 16> bezpatch
HS_CONSTANT_DATA_OUTPUT input
五、添加用户自定义的代码计算输出---domain shader主体
// domain shader outputs
struct DS_OUTPUT
{
float3 vNormal : NORMAL;
float2 vUV : TEXCOORD;
float3 vTangent : TANGENT;
float3 vBiTangent : BITANGENT;
float4 vPosition : SV_POSITION;
};
// 获取输入的UV
[domain("quad")]
DS_OUTPUT BezierEvalDS( HS_CONSTANT_DATA_OUTPUT input,
float2 UV : SV_DomainLocation,
const OutputPatch<BEZIER_CONTROL_POINT, 16> bezpatch )
{
DS_OUTPUT Output;
// Insert code to compute the output here.
return Output;
}
本文详细介绍了如何利用Hull Shader和Domain Shader在图形编程中生成和控制表面几何。通过定义Domain属性,如四边形,以及处理输入的UV坐标和控制点,Domain Shader能够对细分曲面进行计算,输出包括法线、UV坐标、切线空间等信息。文章还展示了Domain Shader的主要代码结构,用于计算最终的输出。
2012

被折叠的 条评论
为什么被折叠?



