beam不是飘带,beam应该有一定的横截面积。
我们可以以2个beam交叉成十字来消除这个飘带效果,但增长了渲染时间,同时如果我要给这个beam贴图,双beam会衍生是另外的alpha深度问题。
一种可取的方法是让beam的所有面都朝向我们的眼睛,实现原理与粒子精灵类似。看上去复杂,其实实现起来连矩阵都用不着。
我们由EyePos(眼睛位置)与ControlPointPos(beam控制点位置)2个向量可以确定一个面:
这个面再由我们beam的厚度(或者宽度)属性,就可以得到一个圆,我们目标Vn与Vn+1就是这个圆上,圆心对称的点:
顶点CP的计算:头尾两端简单地使用于与下一个点的连线的垂线,中间点的可以使用它与前后点构成三角形的中线:
得到CP后,用CP算出SP:
下篇:首尾相连问题。