Главная » Программирование игр под Android » Иерархическая структура матричного стека – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

Что такое иерархическая структура? Примером подобной структуры является Солнечная система. В центре располагается Солнце. Вокруг него находятся планеты, которые вращаются вокруг него на определенном расстоянии. Вокруг некоторых планет есть спутники, которые вращаются вокруг этих планет. И Солнце, и планеты, и спутники крутятся вокруг своих центров (что-то вроде того). Мы можем построить такую систему с помощью матричного стека.

Солнце имеет позицию в нашем мире и крутится вокруг себя. Все планеты двигаются вместе с Солнцем, поэтому, если позиция Солнца поменяется, планеты также должны изменить свои позиции. Для размещения Солнца можно использовать метод glTranslatef , а чтобы заставить его вращаться вокруг своей оси, – метод gl RotatefC.

Планеты имеют позицию, относительную позиции Солнца, и так же, как и Солнце, вращаются вокруг своей оси. Вращение планет вокруг своей оси может быть осуществлено с помощью метода gl RotatefC, а вращение вокруг Солнца – с использованием методов gl Trans. atef  и gl Rotatef . Заставить планету перемещаться вместе с Солнцем можно с помощью дополнительного вызова метода glTranslatef .

Спутники имеют позицию относительно планет, чьими спутниками они являются. Они также вращаются вокруг своей оси и вокруг планеты. Вращение спутника самого по себе может быть осуществлено с помощью метода gl RotatefC), а вращение вокруг планеты – с применением методов glTransl atef  и gl RotatefC). Заставить спутник перемещаться вместе с планетой можно с помощью метода glTransl atef О.

И поскольку планеты перемещаются вместе с Солнцем, спутники также должны перемещаться вместе с ним, чего можно достигнуть использованием метода glTranslatefO.

Здесь мы можем наблюдать так называемые взаимоотношения предков и потомков. Солнце является предком каждой планеты, а каждая планета является предком каждого спутника. Каждая планета является потомком Солнца, а каждый спутник – потомком планеты. Это означает, что позиция каждого потомка задается относительно его предка, а не начала координат мира.

У Солнца нет предка, поэтому его позиция задана относительно начала координат. Планета является потомком Солнца, поэтому ее позиция задана относительно Солнца; Луна является потомком планеты, поэтому ее позиция задана относительно планеты. Вы можете рассматривать центр каждого предка как начало системы координат, в которой определяются его потомки.

Вращение вокруг своей оси каждого из объектов в системе не зависит от предков. Это же верно и в том случае, если бы мы захотели промасштабировать объект. Данные операции относительны лишь центра самого объекта. То же самое происходит внутри пространства моделей.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии