【问题标题】:Updating a mesh along a curve沿曲线更新网格
【发布时间】:2015-01-21 22:55:22
【问题描述】:

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

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

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)

将使用曲线中的“实例化”vector3 坐标将顶点添加到动态列表中。

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

【问题讨论】:

  • 欣赏编辑章节。
  • 更新:设法让列表最终工作(使用 System.Collections.Generic 时似乎有一个看似随机的错误)
  • 更新 2:我错误地假设一个新三角形可以引用以前的三角形。以下三角形将是:4,5,6 4,6,7

标签: c# arrays unity3d bezier procedural-generation


【解决方案1】:

经过一番折腾,我找到了答案:

在三个平行的贝塞尔曲线上取一个浮动距离。 在更新时将这三个点存储为向量。 调整距离 var 并通过 for 循环将每条曲线上的所有向量放入列表中。 在每个 for 循环实例上,将三角形创建到您的 vector2 列表中。 计算完所有点后:创建您的网格并使用一条可自定义的轨道/道路/路径 - 请确保包含网格渲染器、刚体、碰撞器和过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2019-07-05
    • 2021-03-12
    相关资源
    最近更新 更多