Назад

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

Sync On
Sync Rate 30
 

Rem Создаем матрицу
Make matrix 1,10000,10000,20,20

Rem Текстурируем матрицу
Load image "grass09.bmp",1
Prepare matrix texture 1,1,2,2

rem Заполняем матрицу случайными значениями высоты
randomize matrix 1,250

rem Накладываем текстуру случайным образом на каждый тайл матрицы
For x = 0 to 19
 For z = 0 to 19
  t= rnd(3)+1
  Set Matrix Tile 1,x,z,t
 Next z
Next x

Rem Вносим изменения в матрицу
update matrix 1

Rem Основной цикл
Do
 Rem  Сохраняем угол объекта
 CameraAngleY# = Camera angle Y()
 

 Rem  Управление перемещением камеры
 If Upkey()=1 then Move camera 10
 If Leftkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#-5)
 If Rightkey()=1 then Yrotate Camera Wrapvalue(CameraAngleY#+5)
    If Spacekey()=1
        Fill matrix 1,Rnd(50),Rnd(3)+1
          randomize matrix 1,250
    endif

X# = Camera position X()
   Z# = Camera position Z()
 Position Camera X#,250,Z#
 

 Rem Обновляем экран
 Sync
Loop

 

Начнем с подготовки текстуры для матрицы.

    Prepare matrix texture 1,1,2,2

The "Команда "Prepare Matrix Texture" применяется для разбиения на ячейки текстуры, накладываемой на матрицу. Первый параметр после команды - это номер матрицы, для которой мы собираемся подготовить текстуру. Второй параметр - это номер изображения, используемого для текстурирования матрицы. Третий и четвертый параметры - это число создаваемых на каждой оси ячеек. Здесь мы использовали в качестве первого параметра значение 2. Это число делений по оси X. Значение 2 сообщает DarkBASIC, что текстуру надо разделить пополам на две части. В последнем параметре мы также использовали значение 2. Это, в свою очередь, число делений по оси Y. Таким образом, мы разделили изображение на четыре секции, или четыре отдельные текстуры. Изображение, используемое для наложения текстуры на матрицу, не может быть больше, чем 256х256 пикселов, однако вы можете разбить его максимум на 256х256 отдельных тайлов. В большинстве случаев значение двух последних параметров команды будут одинаковы. Если значения параметров будут разными, то текстуры будут непропорционально растянуты при наложении на квадратные ячейки матрицы. Тайлы нумеруются, начиная с левого верхнего угла, слева направо и сверху вниз. Нумерация начинается с 1.

 For x = 0 to 19
 For z = 0 to 19
  t= rnd(3)+1
  Set Matrix Tile 1,x,z,t
 Next z
Next x

Эти вложенные циклы проходят по каждой ячейке матрицы, и случайным образом назначают для каждой из них ранее подготовленный тайл. Чтобы назначить отдельной ячейке матрицы определенный тайл, мы используем команду "Set Matrix Tile". Первый параметр после команды - номер матрицы, которую мы желаем изменить. Второй и третий параметры - это номера строки и колонки, в которых располагается ячейка матрицы, для которой мы хотим изменить тайл. Последний параметр - это номер тайла изображения, размещаемого в определенной ячейке матрицы. Для выбора случайного номера тайла в интервале от 0 до 3 мы применили команду "Rnd". Заметьте, что мы добавили 1 к этому числу, так как тайла с номером "0" не существует. Таким образом, после добавления 1, производится выбор случайного номера тайла в интервале от 1 до 4.

    If Spacekey()=1
        Fill matrix 1,Rnd(50),Rnd(3)+1
        randomize matrix 1,250
    endif

 

Эта часть кода изменяет высоту матрицы и случайным образом изменяет тайлы для каждой ячейки матрицы при каждом нажатии клавиши "пробел". Команда "Fill Matrix" устанавливает определенную высоту и определенный номер тайла изображения для всех тайлов матрицы. Эта команда наилучшим образом подходит для установки начальных значений для всех ячеек матрицы. Первый параметр после команды - номер матрицы, которую мы хотим изменить. Второй параметр - это высота, устанавливаемая нами для всех вершин матрицы. Это полезно при добавлении еще одной матрицы (например, матрицы "вода"), или создании слоев матриц, наложенных друг на друга. Для выбора случайного значения высоты в интервале от 0 до 50 мы использовали команду "Rnd". Эта величина соответствует координатам по оси Y в созданном вами 3D-пространстве. Наконец, последний параметр - это номер тайла подготовленной матричной текстуры, который мы хотим использовать. Для случайного выбора тайла мы применили команду "Rnd".

На этом мы завершаем главу об основах текстурирования матрицы.

Попробуйте изменить значения последних двух параметров в команде "Prepare Matrix Texture", чтобы посмотреть, как изменятся изображения в тайлах. Затем измените значения параметров каждой команды "Rnd" в соответствии с измененным числом тайлов, подготовленных вами для матрицы.

 

Hosted by uCoz