Unity3D — создание сетки из карты высотC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Unity3D — создание сетки из карты высот

Сообщение Anonymous »

Я пытаюсь создать сетку из карты высот, это работает нормально. «Карта высот отличается от карты биома, я тоже работаю над ней..».
Проблема швов быть по ширине «оси X», где она пропускает примерно четверть сетки и начинает перекрываться и переворачиваться, а также перевернута.
Функция вызывается только при запуске, и, честно говоря, я не могу разберитесь с этим, я сравнивал с другими сообщениями и по какой-то причине получил тот же нежелательный результат.
Предполагая, что ширина и высота равны 300 на 300, вот код и некоторые изображения:
Изображение

Изображение

Изображение

public int width = 300;
public int height = 300;

public Texture2D rawPerlinNoiseTex;

void Start()
{
// initialize a new texture if a noise generation code is used
//rawPerlinNoiseTex = new Texture2D(width, height);

GenerateMesh();
}

void GenerateMesh()
{
GameObject meshObject = GameObject.Find("Mesh");
MeshFilter meshFilter = null;
MeshRenderer meshRenderer = null;
Mesh mesh = null;

if (meshObject == null) {
meshObject = new GameObject("Mesh");
meshFilter = meshObject.AddComponent();
meshRenderer = meshObject.AddComponent();
mesh = new Mesh();
meshFilter.mesh = mesh;
} else {
meshFilter = meshObject.GetComponent();
meshRenderer = meshObject.GetComponent();
mesh = meshFilter.mesh;
mesh.Clear();
}

Vector3[] verts = new Vector3[width * height];
Vector2[] uvs = new Vector2[width * height];
int[] tris = new int[width * height * 6];

// vertices and uvs
int vertIndex = 0;
for (int x = 0; x < width - 1; x++) {
for (int y = 0; y < height - 1; y++)
{
// vertices
verts[vertIndex] = new Vector3(x, rawPerlinNoiseTex.GetPixelBilinear((float)x / width, (float)y / height).grayscale * 100, y);

// uvs
uvs[vertIndex] = new Vector2(x / (float)width, y / (float)height);

vertIndex++;
}
}

// triangles
int triIndex = 0;
for (int x = 0; x < width - 1; x++) {
for (int y = 0; y < height - 1; y++)
{
// current vertex
int index = (x * height) + y;
int indexDown = ((x + 1) * height) + y;

// first triangle of the quad
tris[triIndex] = index;
tris[triIndex + 1] = index + 1;
tris[triIndex + 2] = indexDown;

// second triangle of the quad
tris[triIndex + 3] = indexDown;
tris[triIndex + 4] = index + 1;
tris[triIndex + 5] = indexDown + 1;

triIndex += 6;
}
}

mesh.vertices = verts;
mesh.triangles = tris;
mesh.uv = uvs;
mesh.RecalculateNormals();

meshRenderer.material.mainTexture = texture;
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... -heightmap
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Генерация матрицы высот карты Minecraft с помощью Python
    Гость » » в форуме Python
    0 Ответы
    37 Просмотры
    Последнее сообщение Гость
  • Как сделать карты одинаковых высот с теми же элементами содержания высоты
    Anonymous » » в форуме Html
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как сделать карты одинаковых высот с теми же элементами содержания высоты
    Anonymous » » в форуме CSS
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Приоритет сетки: порядок или столбец сетки/строка сетки
    Anonymous » » в форуме CSS
    0 Ответы
    159 Просмотры
    Последнее сообщение Anonymous
  • CSS GRIDS: сетки/Колонны сетки: SPAN 2,3 ... против сетки-Template-AREAS: «Область 1 Область 1 Область 2» ... для создан
    Anonymous » » в форуме Html
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous

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