如何从对象创建多个顶点?

时间:2016-08-21 01:05:49

标签: c# unity3d vertices multiplying

我在如何将物体/模型(Quad)中的顶点乘以轴(Z或X)(如Pic1中)相比有点麻烦我从对象/模型中收集顶点(Quad)然后复制沿轴的顶点(但也可以接受三角形),我在执行此操作时遇到问题,结果在Pic2中。

有人知道怎么做吗?

-Pic1。(我想要实现的目标)

enter image description here

-Pic2。(我得到的结果)

enter image description here

这是代码,所以你知道我做了什么。

using UnityEngine;
using System.Collections;

public class Extruder : MonoBehaviour {

public Mesh prefab;
public int length;
private Mesh mesh;

private Vector3[] vertices;
private Vector3[] mv;
// Use this for initialization
void Start()
{

    vertices = prefab.vertices;
    Generate();
}
// Update is called once per frame
void Generate () {

    vertices = new Vector3[(length)];
    for (int i = 0, x = 0; x <= length; i++, x++)
    {
        vertices[i] = new Vector3(0, 0, x);
    }
    mesh.vertices = vertices;
}
private void OnDrawGizmos()
{
    Gizmos.color = Color.black;
    for (int i = 0; i < vertices.Length; i++)
    {
        Gizmos.DrawSphere(vertices[i], 0.1f);
    }
}
}

1 个答案:

答案 0 :(得分:2)

编辑:为Unity创建顶点数组的资源:

这些都非常好,最近:

http://jayelinda.com/modelling-by-numbers-part-1a/

http://catlikecoding.com/unity/tutorials/procedural-grid/

这正是你所要求的。

你说:

  

沿Z轴绘制点。 (0,0,1),(0,0,2),(0,0,3),(0,0,4)..   等

我认为你想要的是:

  

沿着Z轴的步骤从原点绘制点偏移。 (X + 0,   y + 0,z + 1),(x + 0,y + 0,z + 2),(x + 0,y + 0,z + 3)......等

所以,你需要编写很多代码:

  1. 从网格中读取顶点(您的代码在哪里执行此操作?您还没有这样做)
  2. 对于每个顶点,读取x,y和z坐标(同上)
  3. 对于每个顶点,添加到z坐标而不是x和y
  4. 当然,你只能做一次。在那之后,网格不再是Z = 0平面中的平面四边形,并且你的“挤压”会以指数方式挤出,并且会出现可怕的错误。可能你应该在开始之前检查网格最多有4个顶点(除了一些四边形有6个顶点......)

    但是。

    这不是网格的工作原理。

    您缺少大约20到100行代码,最少。查看有关程序网格生成的一些教程。

    所有额外步骤都不是可选的!如果你错过了它们,有时Unity会出错,但通常它会无声地破坏网格,和/或破坏你的光线,和/或什么都不渲染。如果您忘记执行这些步骤,则大多数步骤都没有错误消息!

    非常少,你必须:

    1. 每个顶点的Vector3
    2. 每个三角形的一组3个整数
    3. ......没有它,Unity几乎不可能做任何事情。

      你还需要,为了让Unity渲染它而不会崩溃:

      1. 每个顶点的法线
      2. 正确配置法线的规范化例程(Unity不会自动执行此操作)
      3. 每个顶点的U,V