Войти
ПрограммированиеСтатьи

Создание ландшафта с помощью задания экстремумов.

Автор: Alexander Shutov (JMan)

Алгоритм
Создание ландшафта

Алгоритм

Введение.

Изображение

В этом туториале я хочу поделиться своим способом создания ландшафта. Этот способ позволяет создавать ландшафт программным путем с помощью задания экстремумов. Все что здесь написано, возможно, после первого прочтения покажется непонятным, но если вы поймете саму идею, то сможете создавать ландшафт не просто в виде возвышенностей и впадин, а в виде нависших гор и пещер.

Алгоритм

Здесь я изложу основные пункты создания ландшафта, после чего прейду к более подробному рассмотрению алгоритма, и реализации его в программном виде.

1) Создать двумерный массив вершин.

2) Задать экстремумы. Экстремум - точка расположенная в трехмерном пространстве, которая является наивысшей точкой возвышенности. Экстремумы задаются над полигонной сеткой ландшафта. Там где будет располагаться экстремум появятся горы или впадины.

3) Задать "радиус распространения" каждого экстремума. Т.е. любая гора в ширину достигает определенного значения, это значение - максимальный диаметр горы. Половина этого диаметра и является "радиусом распространения".

4) Вычислить расстояние от каждой вершины до каждого экстремума(при чем разницу в высотах между экстремумами и вершинами учитывать НЕ надо!!!). Чем меньше расстояние тем выше поднимается точка (при расстоянии равном 0 высота точки будет равна высоте экстремума). Точки которые находятся на расстоянии большем чем "радиус распространения", не входят в образование горы и остаются на своем месте.

5) А теперь идет то место, которое позволяет делать нависающий ландшафт. При задании экстремумов каждому из них задается значение "сдвига" по x,z. Иначе говоря задаются два параметра dX, dZ. Когда будет вычислено на какую высоту (dY) поднять точку, тогда значение высоты умножается на коэффициенты сдвига по x,z (dX,dZ) и получившееся значение складывается с X,Z координатами точки.

Вот и все. После всего этого у вас будет массив вершин, который и задают полигонную сетку.

Структура

Ниже приведена структура для ландшафта:

// Максимальное кол-во экстремумов которое можно задать на ландшафте
#define max_count_extr 20

// Кол-во вершин из которых состоит ландшафт
#define map_size 128 

// структура, задающая позицию точки в 3-х мерном пространстве 
// (3f - значит 3 параметра (x,y,z) типа Float)
struct Vertex3f
{
  float x,y,z;
};

// стурктура ландшафта
struct _Landscape
{
  float Len; // Расстояние между соседними вершинами
  Vertex3f Pos; // Позиция ландшафта (вы можете разместить ландшафт в любом месте)
  int nExt; // Кол-во используемых экстремумов

  // Экстремумы
  struct Extremum 
  {
    Vertex3f hVer; // Экстремум - точка задающая вершину горы(впадины)
    float Radius; // Радиус распространения экстремума
    float dx, dz; // сдвиг экстремума
  } ext[max_count_extr];
};
Страницы: 1 2 Следующая »

19 мая 2003