Программа, выводящая на экран поверхность воды с рябью (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