无名 发表于 2022-5-8 17:04:21

【LSP】DirectX11 With Windows SDK-


http://cdn.u1.huluxia.com/g4/M01/5A/CD/rBAAdl9uyl2AQZe3AACt4WdlvYs259.jpg
连续性对于复杂曲线,如果我们使用高阶曲线的话,观察伯恩斯坦函数形式的顶点式会发现计算量呈平方级别增长。为此我们可以考虑将该曲线分段,然后这些曲线都使用较低阶的贝塞尔曲线去拟合,以此来减少计算量。假设我们现在有两条三阶贝塞尔曲线a和b,那么当曲线a的最后一个控制点与曲线b的第一个控制点位置相同时,我们称这两条曲线满足C0连续。下图的红点为控制点,观察中间的控制点处显然满足这一性质,但是可以看到左右两端曲线的过渡并不是平缓的。http://cdn.u1.huluxia.com/g4/M01/5A/CD/rBAAdl9uyl2AVKciAAAGrNc9nGQ441.png
而如果在满足C0连续的基础上,曲线a在最后一个控制点处的导数还与曲线b在第一个控制点处的导数相等,则此时我们说这两条曲线满足C1连续。http://cdn.u1.huluxia.com/g4/M01/5A/CD/rBAAdl9uyl6ANMJMAAADf8vdSlI347.png
而满足C1连续的控制点必然满足:an=b0=12(an?1+b1)an=b0=12(an?1+b1)即曲线a和b的连接点为曲线a倒数第二个控制点与曲线b第二个控制点的中点。当然还有更高级别的C2连续,即满足二阶导数相等,这里不再深入讨论。HLSL代码实现绘制贝塞尔曲线的外壳着色器和域着色器代码如下:// Tessellation.hlslifloat4 BernsteinBasis(float t){    float invT = 1.0f - t;      return float4(      invT * invT * invT,         // B_{0}^{3}(t)= (1-t)^3      3.0f * t * invT * invT,   // B_{1}^{3}(t)= 3t(1-t)^2      3.0f * t * t * invT,      // B_{2}^{3}(t)= 3t^2(1-t)      t * t * t);               // B_{3}^{3}(t)= t^3}float4 dBernsteinBasis(float t){    float invT = 1.0f - t;      return float4(      -3 * invT * invT,                   // B_{0}^{3}'(t)= -3(1-t)^2      3.0f * invT * invT - 6 * t * invT,// B_{1}^{3}'(t)= 3(1-t)^2 - 6t(1-t)      6 * t * invT - 3 * t * t,         // B_{2}^{3}'(t)= 6t(1-t) - 3t^2      3 * t * t);                         // B_{3}^{3}'(t)= 3t^2}// Tessellation_Isoline_HS.hlslIsolinePatchTess IsolineConstantHS(InputPatch<VertexOut, 4> patch, uint patchID : SV_PrimitiveID){    IsolinePatchTess pt;      pt.EdgeTess = g_IsolineEdgeTess;// 未知    pt.EdgeTess = g_IsolineEdgeTess;// 段数      return pt;}float3 HS(InputPatch<VertexOut, 4> patch, uint i : SV_OutputControlPointID, uint patchId : SV_PrimitiveID) : POSITION{    return patch.PosL;}// Tessellation_BezierCurve_DS.hlsl#include "Tessellation.hlsli"float4 DS(IsolinePatchTess patchTess,    float t : SV_DomainLocation,    const OutputPatch<HullOut, 4> bezPatch) : SV_POSITIONhttp://cdn.u1.huluxia.com/g4/M01/5A/CE/rBAAdl9uymiAYSGSAADgHxQ_Bv4104.png
页: [1]
查看完整版本: 【LSP】DirectX11 With Windows SDK-