Урок 1
Основы Xtreme3D. Теория
Уровень: начинающий
Версия Xtreme3D: 3.0.x
Автор урока: Gecko
Итак, что же такое Xtreme3D?
В первую очередь, это сцена. Сцена, на которой играют "актеры" - объекты. Объект - основное понятие в среде Xtreme3D. Это не то же самое, что объект Game Maker. Объекты Xtreme3D создаются и управляются исключительно в программном коде. Трехмерные модели, примитивы, спецэффекты, небо на дальнем плане, картинки и текст на экране - все это объекты. Объекты любого типа управляются, в большинстве случаев, одними и теми же средствами.
Одно из таких средств - иерархия. Любой объект может иметь одного и нескольких подчиненных ему объектов - "потомков". При этом сам он становится их "родителем" (далее без кавычек). Потомки, в свою очередь, могут иметь собственных потомков, и так далее. По этому принципу и строится вся сцена. Какие в этом преимущества? Например, если отключить какой-нибудь объект (он при этом станет невидимым на экране), то все его потомки (и, соответственно, потомки потомков) по умолчанию также будут отключены. При этом, можно включить любого из потомков, и это не скажется на родителе. Это "унаследование" - самое очевидное из особенностей иерархии. Но это лишь вершина айсберга. Потомки объекта могут наследовать не только его состояние, но и ряд других характеристик. К примеру, объект становится привязанным к своему родителю - куда родитель, туда и потомок. Сам потомок может двигаться на любые расстояния, но лишь относительно местоположения своего родителя. Чтобы легче понять, представьте себе пароход: пассажиры могут свободно перемещаться по палубе или стоять на месте, но все они, по сути, движутся вместе с самим пароходом.
Таким образом, мы постепенно подошли к перемещениям. В компьютерной графике любые перемещения, вращения и масштабирования объединены под общим термином "трансформация". Трансформация в Xtreme3D осуществляется по трем взаимно перпендикулярным координатным осям: X, Y и Z. Ось X направлена вправо, ось Y - вверх, а ось Z - "в глубину". Эта система координат называется декартовой прямоугольной, по имени французского математика Рене Декарта. Местоположение любой точки в системе координат задается тремя ее проекциями на оси. Например, точки (-1,0,-1), (-1,0,1), (1,0,1) и (1,0,-1) образуют квадрат 2х2, лежащий на плоскости XY. Таким образом, любой объект Xtreme3D имеет три координаты, описывающие точку его положения в пространстве. Обычно эта точка совпадает с собственным центром объекта. Положение объекта в пространстве может быть передано относительно абсолютного начала координат сцены (0,0,0) или же относительно координат своего родителя, если таковой имеется. Во втором случае идет речь о так называемых локальных координатах объекта, в которых точка (0,0,0) потомка всегда соответствует точке положения родителя.
Перемещение объекта осуществляется при помощи вектора. Вектор - это отрезок, направленный от точки (0,0,0), в локальных или абсолютных координатах, в любую другую произвольную точку в тех же координатах и описывается координатами этой точки. Объект можно произвольно переместить на любое расстояние в сторону, в которую указывает заданный вектор. Например, вектор (0,10,0) перемещает объект на десять единиц вверх.
Но, поскольку не всегда удобно вручную вычислять вектор для нужного направления движения, используются углы Эйлера (названы по имени Леонарда Эйлера, швейцарского ученого). Они задают углы поворота объекта вокруг его локальных осей X,Y и Z. За нулевой угол берется перпендикулярная ось. Поворот вокруг оси X называется Pitch, вокруг оси Y - Turn, вокруг оси Z - Roll. Нетрудно догадаться, что, например, угол (90,0,0) наклоняет объект назад на 90 градусов.
Полученная в результате этих поворотов трансформация задает направление объекта (Direction), которое также описывается единичным вектором. Единичный вектор отличается от обычного тем, что его длина равна единице (для вектора, описывающего направление, длина не имеет значения). Например, вектор направления (0,1,0) соответствует углу (90,0,0).
Таким образом, мы получаем еще одну характеристику объекта - его направление.
Перемещение объекта в его направлении осуществляется путем умножения вектора направления на расстояние перемещения:
(0, 0, 1) * 10 = (0, 0, 10)
(1, -1 , 1) * 10 = (10, -10, 10)
И в результате мы получаем новые координаты объекта (относительно предыдущих).
Помимо вектора Direction, у объекта есть также автоматически вычисляемые векторы Up и Left, указывающие, соответственно, вверх и налево относительно направления. Эти три взаимно перпендикулярных вектора образуют новую систему координат (Left = X, Up = Y, Direction = Z), которую наследуют все потомки рассматриваемого объекта. Для потомка она становится локальной и все его трансформации задаются в ней. Получается следующее: если мы создадим объекту потомка и переместим его на некоторое расстояние в сторону, то при повороте родителя потомок будет вращаться вокруг него, как Земля вращается вокруг Солнца! Это невероятно полезное свойство иерархии. Как вы вскоре убедитесь, оно используется в Xtreme3D буквально на каждом шагу.
Осталась третья трансформация - масштабирование. Оно изменяет размер объекта по трем осям (ширину, высоту, длину). Масштабировать можно относительно текущего значения масштаба или абсолютно (чтобы задать конкретный размер в абсолютных единицах). Масштабируется также и система координат, наследуемая потомками объекта. То есть, потомок будет не только уменьшен, но и приближен к родителю, как будто мы уменьшаем целую систему объектов. Строго говоря, родитель+потомки - это и есть система объектов. Ее можно рассматривать как один большой объект, состоящий из отдельных логически сгруппированных элементов.
Таким образом, все объекты нашей сцены существуют по определенным математическим закономерностям. Если вы уяснили эти закономерности, изучить Xtreme3D будет проще простого.