30 октября 2012 в 11:56
Blitz3d - спрайты, поверхности
Проволочный каркас
В Blitz3D существует режим отображения, который называется "проволочный каркас". В нем изображаются только контуры элементарных фигур - треугольников. Этот режим включается командой
WIREFRAME 1
Попробуйте посмотреть в этом режиме последнюю созданную программу.
Этот режим наглядно демонстрирует структуру объектов.
Спрайты
Спрайт - это двумерный рисунок в трехмерном пространстве. Классический спрайт всегда повернут в сторону камеры и меняет размеры в зависимости от расстояния до нее. Любой точечный рисунок можно сделать спрайтом:
a = LOADSPRITE(файл)
Спрайт масштабируется с помощью специальной команды:
SCALESPRITE спрайт, SX, SY
Программа "Звездное небо"
Эта программа похожа на программу создания леса.
Изменим программу с роботом (эти строки нужно добавить после строк текстурирования). Загружаем спрайт:
star = LOADSPRITE("C:\media\star.jpg")
Увеличиваем его размеры в 3 раза:
SCALESPRITE star, 3, 3
Создаем цикл, размещающий случайным образом 100 спрайтов над лесом:
FOR x = 1 TO 100 star2 = COPYENTITY(star) POSITIONENTITY star2, RND(-120, 120), RND(20, 50), RND(1, 240) NEXT
Трехмерная поверхность
Трехмерную поверхность можно представить, как листок бумаги в клетку, у которого мы можем задавать высоты точек, лежащих на пересечении линий. Еще, представьте клетчатую сетку, в каждое пересечение брусьев которой впаян штырек. Штыри имеют разные высоты, и если мы накинем на них ткань, то она будет лежать на них некоторой поверхностью.
Создается поверхность с помощью команды:
a = CREATETERRAIN(размер [,род])
Параметр «размер» определяет, на сколько клеток делится поверхность по длине и ширине. Он, так же, как и размер текстуры, должен быть степенью двойки. Высоту определенной точки поверхности задает команда:
MODIFYTERRAIN поверхность, x, z, высота
x и z должны лежать в пределах от 0 до размера поверхности - они определяют точку поверхности. Высота должна лежать в интервале [0, 1]. А вот эта команда включает затенение поверхности:
TERRAINSHADING поверхность, 1
Программа, выводящая на экран поверхность воды с рябью
Сделаем заголовок программы:
GRAPHICS3D 640, 480 cam = CREATECAMERA() POSITIONENTITY cam, 64, 64, -16 ROTATEENTITY cam, 45, 0, 0 l = CREATELIGHT() ROTATEENTITY l, 0, 45, 45
Создадим поверхность:
t = CREATETERRAIN(64)
Включим затенение поверхности:
TERRAINSHADING t, 1
Загрузим текстуру воды и увеличим ее размер в 16 раз, затем привяжем текстуру к поверхности.
water = LOADTEXTURE("C:\media\water.jpg") SCALETEXTURE water, 16, 16 ENTITYTEXTURE t, water
Увеличим размеры поверхности (особенно высоту):
SCALEENTITY t, 2, 20, 2
Создадим бесконечный цикл:
REPEAT Здесь, в этих циклах будут задаваться высоты для каждой из точек поверхности: FOR x = 0 TO 64 FOR z = 0 TO 64 Вкратце можно описать формулу, по которой задаются точки так: синус расстояния от средней точки поверхности до данной плюс приращение умножается на расстояние. r# = SQR((x - 32) * (x-32) + (z - 32) * (z - 32)) / 16 MODIFYTERRAIN t, x, z, SIN(r# * 360 + k) / 2 / (r# + 1) + .5 NEXT NEXT Добавим команды для визуализации, приращение переменной, условие выхода и закроем цикл: RENDERWORLD FLIP k = k - 5 IF KEYDOWN(1) THEN EXIT FOREVER
Создание холмистой поверхности
Эта программа показывает последовательное сглаживание поверхности, заданной случайным образом. Создадим заголовок, где будет создана камера, свет и текстурированная поверхность:
GRAPHICS3D 640, 480 cam = CREATECAMERA() POSITIONENTITY cam, 64, 64, -16 ROTATEENTITY cam, 45, 0, 0 l = CREATELIGHT() ROTATEENTITY l, 0, 45, 45 t = CREATETERRAIN(64) TERRAINSHADING t, 1 grass = LOADTEXTURE( "C:\media\grass.jpg" ) SCALETEXTURE grass, 32, 32 ENTITYTEXTURE t, grass SCALEENTITY t, 2, 60, 2 Делаем цикл из 10 шагов: FOR n = 1 TO 10 Циклы по всем точкам поверхности: FOR x = 0 TO 64 FOR z = 0 TO 64 На первом этапе- задаем высоты точек случайным образом: IF n=1 THEN MODIFYTERRAIN t, x, z, RND(0, 1) Else На следующих этапах устанавливаем для каждой точки значение высоты, равное среднему арифметическому между значениями высоты ее и соседних: MODIFYTERRAIN t, x, z, (TERRAINHEIGHT(t, x - 1, z) + TERRAINHEIGHT(t, x, z - 1) + TERRAINHEIGHT(t, x, z) + TERRAINHEIGHT(t, x + 1, z) + TERRAINHEIGHT(t, x, z + 1)) / 5 END IF NEXT NEXT Визуализируем сцену, ждем нажатия клавиши и закрываем цикл: RENDERWORLD FLIP WAITKEY NEXT
21 декабря 2016 в 20:52
Ishttp://viafast12v.com/ , Safe For Men With Peyronie's Disease?
10 мая 2017 в 10:18
Ultra-cool Nike running shoes<a href="http://www.homesgb.co.uk/">nike air max 1 black</a>
Have this running shoes you can go to the peak of life
Your fate is destined to need such a running shoes
10 мая 2017 в 10:18
Ultra-cool Nike running shoesair max 1
Have this running shoes you can go to the peak of life
Your fate is destined to need such a running shoes
11 мая 2017 в 06:09
Out of work, party, you may need a watch to reflect your temperament and vision,
from the general taste and vision. Here to meet your needs.
авторизуйтесь
или войдите через