沿曲线更新网格

时间:2015-01-21 22:55:22

标签: c# arrays unity3d bezier procedural-generation

我正在寻找一种沿曲线修改程序网格的方法。 (http://docs.unity3d.com/ScriptReference/Mesh.html)通过沿该曲线创建参考Vector3点并随后相应地更新各种网格阵列。

我相信我需要通过将每个vector3索引设置为该变换处的曲线变换,从曲线创建一个vector3数组。 这可以用对象完成,但我不确定这是否适用于vector3数组E.g:

For (int i = 0; i < items.Length; i++, p++) { //gets the array length of custom mesh
    Transform item = Instantiate(items[i]) as Transform; // instantiates item as transform
    Vector3 position = spline.GetPoint(p * stepSize); //references my curve point and creates position vector each update
    item.transform.localPosition = position; //transforms instantiate item to curve point position
}

要解决的第二个问题是使用这个向量数组添加到我的网格中。 每个网格组件的操作类似,因此我将使用三角形作为示例:

初始三角形:(在开始方法上)

0,2,1
2,3,1 

在每次更新时,我希望自然添加2个以上的三角形 以下三角形集将是例如:

2,4,3
4,5,3

(遗憾的是,由于声望限制,我无法发布图片) 这遵循每个新三角形集的规则:

Triangle I0+2 = (Triangle I1 + 2, Triangle I1 + 1, Triangle I1 +2)
Triangle I0+3 = (Triangle I2 + 2, Triangle I2 + 1, Triangle I1 +2)

通过使用&#39;实例化的&#39;将Verticies添加到动态列表中。 vector3从曲线坐标。

我已经在类似的问题上看到了一些尝试,但是我还没有看到这种更新方法,因为看起来其他人已经选择使用网格尺寸更新方法。显然,考虑到使用曲线,这是不切实际的。

1 个答案:

答案 0 :(得分:1)

经过多次修修补补后,我找到了答案:

并行三条贝塞尔曲线的浮动距离。 在更新时将这三个点存储为向量。 调整距离变量并通过for循环将每条曲线上的所有矢量放入一个列表中。 在每个for循环实例上,在vector2列表中创建三角形。 一旦计算了所有点:创建你的网格并展开一个可自定义的轨道/道路/路径 - 一定要包括网格渲染器,刚体,对撞机和过滤器。