Marching Cubes — создание отверстий в сеткеC#

Место общения программистов C#
Ответить
Anonymous
 Marching Cubes — создание отверстий в сетке

Сообщение Anonymous »

Я работаю над реализацией Marching Cubes в Unity. Мой код основан на коде Пола Бурка с множеством модификаций. Я проверяю, является ли блок в позиции нулевым, и если да, то на него будет помещена отладочная текстура.
Изображение

Это мой скрипт MC.

Код: Выделить всё

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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»