删除立方体地形的隐藏顶点和三角形



我是新来的。我在研究使用网格的程序地形。我开始制作一个程序地形,就像《我的世界》。我不知道如何删除隐藏块中隐藏的顶点和三角形。

隐藏的顶点和三角形

我的代码:

体素.cs:

using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshCollider))]
[RequireComponent(typeof(MeshRenderer))]
public class Voxel : MonoBehaviour {
public Vector3[] vertices;
public int[] triangles;
public Vector3 pos;
public GameObject chunk;
Mesh mesh;
public bool blockSolid;
public Voxel(Vector3 position, GameObject obj)
{
pos = position;
chunk = obj;
}
void Start () 
{
mesh = new Mesh();
//Cube(0,0,0);
}


public void Cube(int x, int y, int z)
{
GameObject cube = new GameObject("Cubo");
cube.AddComponent(typeof(MeshFilter));
cube.AddComponent(typeof(MeshCollider));
cube.AddComponent(typeof(MeshRenderer));
cube.transform.parent = chunk.transform;
mesh = cube.GetComponent<MeshFilter>().mesh;
//cube.transform.position = pos;
vertices = new Vector3[]
{
new Vector3(x,y,z),         // 0
new Vector3(x,y+1,z),       // 1
new Vector3(x+1,y+1,z),     // 2
new Vector3(x+1,y,z),       // 3
new Vector3(x+1,y,z+1),     // 4
new Vector3(x+1,y+1,z+1),   // 5
new Vector3(x,y+1,z+1),     // 6
new Vector3(x,y,z+1)        // 7
};
triangles = new int[]
{
0,1,2,  0,2,3,              // Face frontal
3,2,5,  3,5,4,              // Face direita
0,7,6,  0,6,1,              // Face esquerda
7,4,5,  7,5,6,              // Face traseira
1,6,5,  1,5,2,              // Face superior
0,3,4,  0,4,7               // Face inferior
};
UpdateMesh();
}
void UpdateMesh()
{
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.RecalculateNormals();
}
}

Chunk.cs:

using System.Collections.Generic;
using UnityEngine;
public class Chunk : MonoBehaviour {
public int tx, ty, tz;
public Vector3 pos;
IEnumerator BuildChunk()
{
for (int x = 0; x < tx; x++)
{
for (int y = 0; y < ty; y++)
{
for (int z = 0; z < tz; z++)
{
pos = new Vector3(x,y,z);
Voxel block = new Voxel(pos, this.gameObject);
block.Cube(x,y,z);
yield return null;
}
}
}
}
void Start () 
{
StartCoroutine(BuildChunk());
}
}

我只需要删除隐藏的顶点和三角形,但我不知道该怎么做。

诀窍是只生成玩家可见的三角形。因此,不应该为每个体素生成立方体,而应该为立方体的面的子集生成立方体。

这样做的方法是检查每个体素的所有6个边。如果给定的边与另一个体素相邻,则忽略该边并继续前进。如果没有体素与该边相邻,则将相应的立方体面添加到该边。这将导致一个包含整个地形或您加载的地形的整体网格。

最新更新