作为像素着色器以数学方式实现:
在CPU上,使用V2计算HealthDirection及其点积
在GPU上,为每个像素计算远离中心点的归一化方向。将每个点产品与HealthDirections进行比较,以选择是对“背景”进行着色还是对颜色进行着色。
如果“反转”此算法并从另一个方向进行工作,则可以将每个像素的方向“解压”回一个百分比,然后将它们与HealthPercent进行比较。计算每个像素的百分比后,在GPU上执行从红色到绿色的渐变变得微不足道。
首先将算法应用于四边形绘制一条线;输出rangeMin和rangeMax之间的颜色(可以烘焙)和clip()或在其他位置输出透明颜色。接下来,使用Alpha在其上绘制(修改的)精灵。我用CAD追踪了您的条形图,对其进行了填充,然后“神奇地消失”了Paint中的纯色形状以将其删除。由于手工混合了AutoCAD和Paint,因此矿山看起来像废话。假设您将内部边缘混合为透明的,则您的外观会很完美。
白色边框是四边形的界限。它和红色的X仅供参考:
不需要与运行状况栏同时渲染“带孔的精灵”。在完成所有健康状况指示条之后,应立即实例化它们并绘制它们。由于该算法是独立存在于着色器中的,因此您还可以为其添加实例化,然后还可以通过一个实例化的绘制调用来绘制所有运行状况栏。在屏幕上绘制每个运行状况栏应进行2次DrawInstanced(...)调用,并且“抓狂”。