首页 > 解决方案 > 如何根据梯度计算/分配顶点的权重

问题描述

我有一个顶点列表,大小为 N,权重梯度(可以是任何长度)定义为:

float[] weight_distribution = { 0f, 1f, 0f };

这表示第一个和最后一个顶点的权重较小,而中间的顶点将满。就像一个黑白渐变,其键定义为数组。

这基于一个平面的 Y 轴,该平面包含许多段,该平面要根据梯度为程序绑定进行加权。该列表根据顶点的 Y 值进行排序,以便在列表的开头找到最低的顶点,最后找到最高的顶点。

我不知道如何用这种梯度计算给定顶点的权重。任何指针都会非常有帮助。

我尝试了一些不同的方法来查找有关当前顶点的值,但我不知道如何从该位置的渐变中提取权重。

这可能只是垃圾,但无论如何我都会把它放在这里以防万一。

// find unique Ys
List<float> ys = new List<float>();
for (int i = 0; i < list.Count; i++)  { 
    if (!ys.Contains(list[i].y)) { ys.Add(list[i].y); } 
}
float min = ys[0];
float max = ys[ys.Count - 1];
int levels = (ys.Count - 1);
float levelStep = (gradient.Length * 1f / levels * 1f);
float currentY = ys[0];

// set weights here
for (int i = 0; i < list.Count; i++)
{
     // find current pos/value based on gradient somehow?
     if(list[i].y > currentY ) { currentY = list[i].y; yindex++; }
     float pos = ((yindex * levelStep) / levels * 1f);
     float lerped = Mathf.Lerp(list[i].y, max, pos);

     // ... calculate weight
}

标签: c#unity3dlinear-interpolation

解决方案


推荐阅读