Beam光束效果(为了应付老师的数量要求,无奈地分篇讲述)
Beam1
NumControlPoint = 24;
TessellationAmount = 1;
FaceToCamera = false;
Beam 2
NumControlPoint = 10;
TessellationAmount = 10;
FaceToCamera = false;
Beam 3
NumControlPoint = 10;
TessellationAmount = 1;
FaceToCamera = true;
维护一个VertexBuffer遵循TRIANGLESTRIP规则,渲染前用
ID3D11DeviceContext::IAGetPrimitiveTopology Method设置D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP就可以得到粗糙的Beam1光束。当然Beam1还是用到了噪声算法来驱动顶点的位置变化,这一步的实现,我交给了GPU(Compute Shader)来完成。
至于DirectX11 Shader的具体使用且听下回分解。但是要想得到平滑的光束效果,我们需要使用DirectX11的新Shader技术,Beam2中我为了减少GPU开销,只对U方向进行多次细分,在V方向只进行一次细分,同时U方向是贝塞尔曲线插值,V方向是简单线性插值。