C# 如何从一个对象创建多个顶点?
在如何将对象/模型(四边形)的顶点跨轴(Z或X)相乘方面,我遇到了一些麻烦,如图1中所示。我从对象/模型(四边形)收集顶点,然后沿轴复制顶点(但对于三角形也是可以接受的),我在这方面遇到了麻烦。结果在图2中 有人知道怎么做吗 -图1。(我正在努力实现的目标) -图2。(我得到的结果) 这是代码,你知道我做了什么C# 如何从一个对象创建多个顶点?,c#,unity3d,vertices,multiplication,C#,Unity3d,Vertices,Multiplication,在如何将对象/模型(四边形)的顶点跨轴(Z或X)相乘方面,我遇到了一些麻烦,如图1中所示。我从对象/模型(四边形)收集顶点,然后沿轴复制顶点(但对于三角形也是可以接受的),我在这方面遇到了麻烦。结果在图2中 有人知道怎么做吗 -图1。(我正在努力实现的目标) -图2。(我得到的结果) 这是代码,你知道我做了什么 using UnityEngine; using System.Collections; public class Extruder : MonoBehaviour { publ
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);
}
}
}
使用UnityEngine;
使用系统集合;
公共级挤出机:MonoBehavior{
公共网格预制;
公共整数长度;
私有网格;
私有向量3[]个顶点;
专用矢量3[]mv;
//用于初始化
void Start()
{
顶点=预设顶点;
生成();
}
//每帧调用一次更新
void生成(){
顶点=新矢量3[(长度)];
对于(int i=0,x=0;x编辑:关于为Unity创建顶点数组的资源:
这些都很好,而且是最近的:
这正是你要求的
你说:
沿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)等等
因此,您有很多代码要编写:
从网格中读取顶点(执行此操作的代码在哪里?尚未执行此操作)
对于每个顶点,读取x、y和z坐标(同上)
对于每个顶点,添加到z坐标,但不添加到x和y坐标
当然,您只能这样做一次。此后,网格不再是Z=0平面中的平面四边形,您的“挤出”将以指数方式挤出,并出现严重错误。在开始之前,您可能应该检查网格最多有4个顶点(除了某些四边形有6个顶点…)
然而。
网格不是这样工作的
至少缺少大约20-100行代码。请查找有关程序网格生成的一些教程
所有额外的步骤都不是可选的!如果您错过了这些步骤,Unity有时会出错,但通常会悄悄地损坏网格,和/或破坏照明,和/或不渲染任何内容。如果您忘记执行这些步骤,大多数步骤都不会出现错误消息
至少,您必须具备:
每个顶点的向量3
每个三角形的一组3整数
…没有这一点,团结就不可能做任何事情
为了使Unity渲染时不发生崩溃,还需要:
每个顶点的法线
正确配置法线的规范化例程(Unity不会自动执行此操作)
每个顶点的U,V
编辑:有关为Unity创建顶点阵列的资源:
这些都很好,而且是最近的:
这正是你要求的
你说:
沿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)等等
因此,您有很多代码要编写:
从网格中读取顶点(执行此操作的代码在哪里?尚未执行此操作)
对于每个顶点,读取x、y和z坐标(同上)
对于每个顶点,添加到z坐标,但不添加到x和y坐标
当然,您只能这样做一次。此后,网格不再是Z=0平面中的平面四边形,您的“挤出”将以指数方式挤出,并出现严重错误。在开始之前,您可能应该检查网格最多有4个顶点(除了某些四边形有6个顶点…)
然而。
网格不是这样工作的
至少缺少大约20-100行代码。请查找有关程序网格生成的一些教程
所有额外的步骤都不是可选的!如果您错过了这些步骤,Unity有时会出错,但通常会悄悄地损坏网格,和/或破坏照明,和/或不渲染任何内容。如果您忘记执行这些步骤,大多数步骤都不会出现错误消息
至少,您必须具备:
每个顶点的向量3
每个三角形的一组3整数
…没有这一点,团结就不可能做任何事情
为了使Unity渲染时不发生崩溃,还需要:
每个顶点的法线
正确配置法线的规范化例程(Unity不会自动执行此操作)
每个顶点的U,V
你说1.从网格中读取顶点(你的代码在哪里?你还没有这么做),这正是我想学习的(我很确定)我知道如何做其余的。无论如何,我已经搜索了很长一段时间的程序网格生成,但什么也没找到。你知道有什么好的网站可以学习这个主题吗?我每次在谷歌的前几次点击中都发现了这一点(更新的答案,见顶部)你说1.从网格中读取顶点(你的代码在哪里?你还没有这么做),这正是我想学习的(我很确定)我知道如何做其余的。无论如何,我已经搜索了很长一段时间的程序网格生成,但什么也没找到。你知道有什么好的网站可以学习这个主题吗?我每次在谷歌的前几次点击中都发现了这一点(更新的答案,见顶部)