Мы закончили рассмотрение прошлого занятия на перемещениях и сепараторах. Сегодня нам предстоит познакомиться с вращением и масштабированием. Если мы не сильно переработаем, то я расскажу и об освещении наших миров.
Для вращения используется функция Rotation. Она выглядит так же как и в OpenGL.
rotation {0 0 1 0.78}
В этом примере я произвожу поворот на 45 градусов по оси Z. Как я это узнал? Первые три параметра говорят, по какой оси будет производиться вращение (X, Y или Z). Они могут принимать значение 0 или 1. У меня третий параметр 1, значит именно по третьей оси (Z) будет происходить вращение.
В градусах
В радианах
30
0,52
45
0,78
60
1,04
90
1,57
180
3,14
270
4,71
360
6,28
Последний параметр говорит, на сколько надо повернуть. 0,78 - это 45 градусов. Это ещё чё за прикол? Это называется радианы. Угол поворота задаётся именно в этом исчислении. Для простоты понимания я тебе создал небольшую табличку, в которой поставил основные углы и соответствующие им радианы.
Не забывай, с этой функцией также можно использовать сепаратор, чтобы выделить область объектов, на которые должна влиять функция rotation.
Теперь перейдём к масштабированию. Для этого используется функция scale:
Scale {
scaleFactor 2 4 7
}
Этот пример промасштабирует все последующие объекты на 2 по оси X, на 4 по оси Y и на 7 по оси Z. Я думаю, что больше комментариев не нужно.
Теперь начнём знакомство с освещением. И начнём мы его с простого точечного света. Ты с таким светом встречаешься каждый день в подъезде, на улице и даже дома в постели. Обрати внимание, что я пишу свет, а не Свет. Потому что я имею ввиду лампочку. Простую лампочку накаливания. Для её создания можно воспользоваться функцией PointLight. Вот как она может выглядеть:
ambientIntensity - грубо говоря, указывает общую интенсивность света (от 0 до 1)
attenuation - показывает, как быстро будет падать интенсивность света по мере его удаления. Три значения используются при расчёте формулы. Лично я никогда этой формулой не пользовался, потому что она слишком неудобная. Я всегда выбираю это значение методом научного тыка. Всё равно, в WEB никто не обращает на мелкие детали. Главное, чтобы было красиво.
color - цвет лампочки
intensity - яркость освещения (от 0 до 1)
location - расположение лампочки в пространстве (X, Y, Z). Хочу сразу предупредить, что оператор transform влияет на положение лампочки
radius - Радиус действия
Теперь мы познакомимся с ещё одной лампочкой, только теперь она будет засунута в отражатель. Ты ещё не догадался? Это будет направленный свет, как у прожектора.
DirectionalLight {
ambientIntensity 0
color 1 0 0
direction 0 0 -1
intensity 1
on TRUE
}
Ничего нового здесь нет. Все параметры тебе уже знакомы. Поэтому мы переходим к следующей лампочке. Эта лампа имеет направленный свет как у прожектора, только он рассеянный.
Здесь также известны практически все параметры, кроме beamWidth и cutoffAngle. Это углы. BeamWidth - угол яркого свечения прожектора. Внутри этого угла свет будет ярким. Вне этого угла он будет более тусклым. CutoffAngle - угол побольше, который показывает, где должна заканчиваться граница тусклого свечения. Вне этого угла, света от этой лампочки вообще не будет. Посмотри на рисунок 1, возможно он поможет тебе разобраться.
Вроде всё. С основами мы покончили. Мне ещё осталось тебе рассказать совсем немного, что я сделаю в следующий раз.