Цель урока: научиться накладывать текстуры на матрицу.
Мы начнем с программы, которая создает рельефную местность и текстурирует каждую ячейку матрицы случайным образом.
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" в соответствии с измененным числом тайлов, подготовленных вами для матрицы.