如何从一个对象创建多个顶点?
How do i create multiple vertices from an object?
我在如何将 object/model(Quad) 的顶点乘以横跨轴(Z 或 X)的顶点方面遇到了一些麻烦,就像在 Pic1 中一样,我从 object/model 中收集顶点(Quad)然后沿轴复制顶点(但也可以接受三角形),我在执行此操作时遇到了麻烦,结果在 Pic2 中。
有人知道怎么做吗?
-Pic1.(我要实现的目标)
-图2.(我得到的结果)
这是代码,所以你知道我做了什么。
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);
}
}
}
编辑:有关为 Unity 创建顶点数组的资源:
这两个都不错,最近的:
http://jayelinda.com/modelling-by-numbers-part-1a/
http://catlikecoding.com/unity/tutorials/procedural-grid/
它完全按照您的要求进行。
你说:
Draw points along the Z-axis. (0,0,1), (0,0,2), (0,0,3), (0,0,4) ..
etc
我想你想要的是:
Draw points OFFSET FROM THE ORIGINAL by steps along the Z-axise. (x+0,
y+0, z+1), (x+0, y+0, z+2), (x+0, y+0, z+3)... etc
所以,你有很多代码要写:
- 从网格中读取顶点(执行此操作的代码在哪里?您还没有这样做)
- 对于每个顶点,读取 x、y 和 z 坐标(同上)
- 对于每个顶点,添加到 z 坐标而不是 x 和 y
当然,您只能这样做一次。在那之后,网格不再是 Z=0 平面中的扁平四边形,并且您的 "extrusion" 将呈指数拉伸,并且出现严重错误。可能你应该在开始之前检查网格最多有 4 个顶点(除了一些四边形有 6 个顶点......)
不过。
网格不是这样工作的。
您至少缺少大约 20-100 行代码。寻找一些关于程序网格生成的教程。
所有额外的步骤都不是可选的!如果你错过了它们,有时 Unity 会出错,但通常它会默默地破坏网格,and/or 破坏你的照明,and/or 不渲染任何东西。如果您忘记执行大多数步骤,则没有错误消息!
至少,您必须:
- 每个顶点一个 Vector3
- 每个三角形有一组 3 个整数
...没有它,Unity 几乎不可能做任何事情。
你还需要,为了让 Unity 渲染它而不会崩溃:
- 每个顶点的法线
- 正确配置法线的规范化例程(Unity 不会自动执行此操作)
- 每个顶点一个 U,V
我在如何将 object/model(Quad) 的顶点乘以横跨轴(Z 或 X)的顶点方面遇到了一些麻烦,就像在 Pic1 中一样,我从 object/model 中收集顶点(Quad)然后沿轴复制顶点(但也可以接受三角形),我在执行此操作时遇到了麻烦,结果在 Pic2 中。
有人知道怎么做吗?
-Pic1.(我要实现的目标)
-图2.(我得到的结果)
这是代码,所以你知道我做了什么。
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);
}
}
}
编辑:有关为 Unity 创建顶点数组的资源:
这两个都不错,最近的:
http://jayelinda.com/modelling-by-numbers-part-1a/
http://catlikecoding.com/unity/tutorials/procedural-grid/
它完全按照您的要求进行。
你说:
Draw points along the Z-axis. (0,0,1), (0,0,2), (0,0,3), (0,0,4) .. etc
我想你想要的是:
Draw points OFFSET FROM THE ORIGINAL by steps along the Z-axise. (x+0, y+0, z+1), (x+0, y+0, z+2), (x+0, y+0, z+3)... etc
所以,你有很多代码要写:
- 从网格中读取顶点(执行此操作的代码在哪里?您还没有这样做)
- 对于每个顶点,读取 x、y 和 z 坐标(同上)
- 对于每个顶点,添加到 z 坐标而不是 x 和 y
当然,您只能这样做一次。在那之后,网格不再是 Z=0 平面中的扁平四边形,并且您的 "extrusion" 将呈指数拉伸,并且出现严重错误。可能你应该在开始之前检查网格最多有 4 个顶点(除了一些四边形有 6 个顶点......)
不过。
网格不是这样工作的。
您至少缺少大约 20-100 行代码。寻找一些关于程序网格生成的教程。
所有额外的步骤都不是可选的!如果你错过了它们,有时 Unity 会出错,但通常它会默默地破坏网格,and/or 破坏你的照明,and/or 不渲染任何东西。如果您忘记执行大多数步骤,则没有错误消息!
至少,您必须:
- 每个顶点一个 Vector3
- 每个三角形有一组 3 个整数
...没有它,Unity 几乎不可能做任何事情。
你还需要,为了让 Unity 渲染它而不会崩溃:
- 每个顶点的法线
- 正确配置法线的规范化例程(Unity 不会自动执行此操作)
- 每个顶点一个 U,V