C# 在网格之间进行平滑过渡
所以我最近开始了一个项目,在那里我使用柏林噪声生成了一些网格,并将它们彼此相邻放置。但是,每个网格的边上显然没有相同的y坐标,因此可以看到每个网格之间的间隙 我想知道是否有人知道如何找到所有边顶点,并为它们提供与其邻居相同的y坐标?我在脚本中创建了网格,所以我可以访问所有顶点和三角形,我只是不知道如何过滤网格边上的顶点和三角形 另外,是否有一种简单的方法来平滑每个网格的过渡,而不是直接为它们指定与其相邻顶点相同的y值 谢谢 编辑:对不起,我忘记显示代码了!这是:C# 在网格之间进行平滑过渡,c#,unity3d,mesh,perlin-noise,C#,Unity3d,Mesh,Perlin Noise,所以我最近开始了一个项目,在那里我使用柏林噪声生成了一些网格,并将它们彼此相邻放置。但是,每个网格的边上显然没有相同的y坐标,因此可以看到每个网格之间的间隙 我想知道是否有人知道如何找到所有边顶点,并为它们提供与其邻居相同的y坐标?我在脚本中创建了网格,所以我可以访问所有顶点和三角形,我只是不知道如何过滤网格边上的顶点和三角形 另外,是否有一种简单的方法来平滑每个网格的过渡,而不是直接为它们指定与其相邻顶点相同的y值 谢谢 编辑:对不起,我忘记显示代码了!这是: [RequireComponen
[RequireComponent(typeof(MeshFilter))]
public class MeshGenerator : MonoBehaviour
{
Mesh mesh;
Vector3[] vertices;
int[] triangles;
int size = 100;
float xMod = 0.3f;
float zMod = 0.3f;
float noiseMod = 2;
// Start is called before the first frame update
void Start()
{
mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
//Sets the different perlin noise values
if (Random.Range(0f, 2f) < 1.6f)
{
xMod = Random.Range(0.03f, 0.1f);
zMod = Random.Range(0.03f, 0.1f);
if (Random.Range(0f, 2f) < 1.6f)
{
noiseMod = Random.Range(1f, 4f);
}
else
{
noiseMod = Random.Range(1f, 30f);
}
}
else
{
xMod = Random.Range(0.1f, 0.5f);
zMod = Random.Range(0.1f, 0.5f);
if (Random.Range(0f, 2f) < 1.6f)
{
noiseMod = Random.Range(1f, 1.7f);
}
else
{
noiseMod = Random.Range(1f, 1.4f);
}
}
CreateShape();
UpdateMesh();
GetComponent<MeshCollider>().sharedMesh = mesh;
}
//Creates all the necessary triangles
void CreateShape()
{
vertices = new Vector3[(size + 1) * (size + 1)];
for (int z = 0, i = 0; z <= size; z++)
{
for (int x = 0; x <= size; x++)
{
//Perlin noise with randomly selected values from earlier to set y value of vertex
float y = Mathf.PerlinNoise(x * xMod, z * zMod) * noiseMod;
vertices[i] = new Vector3(x, y, z);
i++;
}
}
triangles = new int[size * size * 6];
int verts = 0;
int tris = 0;
//Sets all vertices' coordinates for each square
for (int z = 0; z < size; z++)
{
for (int x = 0; x < size; x++)
{
triangles[tris] = verts;
triangles[tris + 1] = verts + size + 1;
triangles[tris + 2] = verts + 1;
triangles[tris + 3] = verts + 1;
triangles[tris + 4] = verts + size + 1;
triangles[tris + 5] = verts + size + 2;
verts++;
tris += 6;
}
verts++;
}
}
//Updates the meshes
void UpdateMesh()
{
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.RecalculateNormals();
}
}
[RequireComponent(typeof(MeshFilter))]
公共类网格生成器:单行为
{
网目;
向量3[]个顶点;
int[]三角形;
int size=100;
浮点数xMod=0.3f;
浮球zMod=0.3f;
float noiseMod=2;
//在第一帧更新之前调用Start
void Start()
{
网格=新网格();
GetComponent().mesh=mesh;
//设置不同的柏林噪波值
if(随机范围(0f,2f)<1.6f)
{
xMod=随机范围(0.03f,0.1f);
zMod=随机范围(0.03f,0.1f);
if(随机范围(0f,2f)<1.6f)
{
noiseMod=随机范围(1f,4f);
}
其他的
{
noiseMod=随机范围(1f,30f);
}
}
其他的
{
xMod=随机范围(0.1f,0.5f);
zMod=随机范围(0.1f,0.5f);
if(随机范围(0f,2f)<1.6f)
{
noiseMod=随机范围(1f,1.7f);
}
其他的
{
noiseMod=随机范围(1f,1.4f);
}
}
CreateShape();
UpdateMesh();
GetComponent().sharedMesh=mesh;
}
//创建所有必要的三角形
void CreateShape()
{
顶点=新矢量3[(大小+1)*(大小+1)];
对于(int z=0,i=0;z),您可以根据原点和偏移量对其进行采样,而不是从柏林噪声中随机选取值。通过从相同位置和偏移量进行采样,它将显示为块瓷砖是同一个较大网格的一部分。您可以显示您的代码吗?@teebkne好的,我将进行拍摄。谢谢!