Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура.
public class MarchingCubes
{
private World world;
private Chunk chunk;
private List vertices = new List ();
private List normals = new List ();
private Vector3[] ns;
private List triangles = new List ();
private List uvs = new List ();
private Vector3[] positions = new Vector3[8];
private float[] corners = new float[8];
private Vector3i size = new Vector3i (16, 128, 16);
Vector3[] vertlist = new Vector3[12];
private float isolevel = 1f;
private float Corner (Vector3i pos)
{
int x = pos.x;
int y = pos.y;
int z = pos.z;
if (x < size.x && z < size.z) {
return chunk.GetValue (x, y, z);
} else {
int ix = chunk.X, iz = chunk.Z;
int rx = chunk.region.x, rz = chunk.region.z;
if (x >= size.x) {
ix++;
x = 0;
}
if (z >= size.z) {
iz++;
z = 0;
}
return chunk.region.GetChunk (ix, iz).GetValue (x, y, z);
}
}
Block block;
public Mesh MarchChunk (World world, Chunk chunk, Mesh mesh)
{
this.world = world;
this.chunk = chunk;
vertices.Clear ();
triangles.Clear ();
uvs.Clear ();
for (int x = 0; x < size.x; x++) {
for (int y = 1; y < size.y - 2; y++) {
for (int z = 0; z < size.z; z++) {
block = chunk.GetBlock (x, y, z);
int cubeIndex = 0;
for (int i = 0; i < corners.Length; i++) {
corners [i] = Corner (new Vector3i (x, y, z) + offset [i]);
positions [i] = (new Vector3i (x, y, z) + offset [i]).ToVector3 ();
if (corners [i] < isolevel)
cubeIndex |= (1
Подробнее здесь: [url]https://stackoverflow.com/questions/44760112/marching-cubes-generating-holes-in-mesh[/url]
Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура. [img]https://i.sstatic.net/zShjr.png[/img]
Это мой сценарий MC. [code]public class MarchingCubes { private World world; private Chunk chunk; private List vertices = new List (); private List normals = new List (); private Vector3[] ns; private List triangles = new List (); private List uvs = new List (); private Vector3[] positions = new Vector3[8]; private float[] corners = new float[8]; private Vector3i size = new Vector3i (16, 128, 16);
Vector3[] vertlist = new Vector3[12];
private float isolevel = 1f;
private float Corner (Vector3i pos) { int x = pos.x; int y = pos.y; int z = pos.z; if (x < size.x && z < size.z) { return chunk.GetValue (x, y, z); } else { int ix = chunk.X, iz = chunk.Z; int rx = chunk.region.x, rz = chunk.region.z; if (x >= size.x) { ix++; x = 0; }
if (z >= size.z) { iz++; z = 0; } return chunk.region.GetChunk (ix, iz).GetValue (x, y, z); } }
for (int x = 0; x < size.x; x++) { for (int y = 1; y < size.y - 2; y++) { for (int z = 0; z < size.z; z++) {
block = chunk.GetBlock (x, y, z); int cubeIndex = 0;
for (int i = 0; i < corners.Length; i++) { corners [i] = Corner (new Vector3i (x, y, z) + offset [i]); positions [i] = (new Vector3i (x, y, z) + offset [i]).ToVector3 ();
Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура.
Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура.
Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура.
if (mesh == null)
mesh = new...
У меня есть программа на Qt C++, которая позволяет пользователю свободно рисовать каракули. Эта каракуля затем будет преобразована в многоугольник. В настоящее время эта функциональность реализована, но я предпочитаю реализовать трассировщик...