Основы трехмерной графики в среде Blitz3D


Программа, создающая нагромождение шаров (20 мин)


Создадим заголовок:

GRAPHICS3D 640,480

cam = CREATECAMERA()

l = CREATELIGHT()

ROTATEENTITY l, 45, 45, 0

Создадим и оттектурируем плоскость:

grass = LOADTEXTURE("C:\MEDIA\GRASS.JPG")

SCALETEXTURE grass, 16, 16

p =

CREATEPLANE()

POSITIONENTITY p, 0, -5, 0

ENTITYTEXTURE p, grass

Зададим тип плоскости, равным 1, тип шаров будет равным 2:



ENTITYTYPE p, 1

Шары (2) могут сталкиваться с плоскостью (1), которая определяется, как многогранник(2), при этом они будут останавливаться (1):

COLLISIONS 2, 1, 2, 2

Шары (2) могут сталкиваться с другими шарами (2), которые определяются, как сферы(1), при этом они будут скользить(2):

COLLISIONS 2, 2, 1, 2

Когда переменная s равна 0, это означает, что нужно создать новый шар:

s = 0

Бесконечный цикл:

REPEAT

 IF s = 0 THEN

Создаем шар, если s = 0, задаем его тип (2) и радиус сферы столкновения (1):

  s =

CREATESPHERE() 

  ENTITYTYPE s, 2

  ENTITYRADIUS s, 1

Задаем случайное местоположение шара на высоте 12:

  POSITIONENTITY s, RND(-5,5), 12, RND(10,20)

 END IF

Заносим текущие координаты шара в три переменные:

 sx# = ENTITYX(s)

 sy#

= ENTITYY(s)

 sz#

= ENTITYZ(s)

Шар перемещается вниз под воздействием гравитации:

 MOVEENTITY s, 0, -0.3, 0

Проверяем столкновения:

 UPDATEWORLD

 

Если координаты шара не изменились, то он прочно застрял и нужно бросать новый шар:

 IF sx# = ENTITYX(s) AND sy#=ENTITYY(s) AND SZ# = ENTITYZ(s) THEN s = 0

Завершаем цикл, визуализируем сцену:

 IF KEYDOWN(1) THEN EXIT

 RENDERWORLD

 

FLIP

FOREVER



Содержание раздела