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


Программа, выводящая на экран поверхность воды с рябью (25 мин)


Сделаем заголовок программы:

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



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