Многие из вас хорошо осведомлены о современных методах трансформации геометрии в трехмерных
приложениях и играх, а точнее о матрицах и эвклидовых уравнениях. О первых вы можете узнать,
ознакомившись с материалом "Матричные операции" на этом сайте,
а статьи о вторых вам придется поискать где-нибудь в другом месте.
Сейчас я представлю вам третий, альтернативный способ трансформации геометрии - управляющими кубами.
Материал о нем я читал уже очень давно, и тогда на этот метод не обратили должного внимания, хотя он и
имеет неплохие перспективы. Сейчас я попытаюсь возродить прошлое и расскажу о нем еще раз, теперь уже
по-русски и со своими добавлениями и исправлениями.
Внимание! Этот материал рассчитан на людей, очень хорошо владеющих понятиями и тезисами
компьютерной графики, а совсем не на новичка.
.
Метод управляющих кубов
Представьте, что у вас есть модель. Она состоит из точек - каждой точке соответствуют
ее координаты в трехмерном пространстве и координаты текстуры. Вокруг любой модели можно
описать куб, так называемый bounding box, думаю, это умеют все.
Теперь отбросим все координаты модели относительно мира (сцены) и вычислим ее координаты
относительно куба, предположив, что его сторона - единичный отрезок, т.е все координаты
модели после преобразования будут находиться в пределах [0,1].
Предположим куб задан так: struct b_cube {
Point3D base, v1, v2, v3; };
Что соответствует трем векторам - (base,v1), (base,v2) и (base,v3). Это минимальное
количество векторов, необходимое для задания куба в трехмерном пространстве. А выглядит это
примерно так, как на рисунке.
Я думаю, вы уже догадались, куда я клоню: теперь, когда нам известны координаты модели
относительно единичного куба, мы можем восстановить ее в любом месте сцены, указанном положением,
масштабом и ориентацией управляющего куба.
Итак, теперь повторим еще раз, что же нам необходимо сделать для успешной реализации данного метода:
1.
Перед началом работы программы надо преобразовать все пространственные координаты модели в кубические (координаты относительно управляющего куба).
2.
В основном цикле трансформировать ТОЛЬКО управляющий куб любым из двух методов - или за счет использования матриц или при помощи формул. Именно на этом шаге достигается некоторый выигрыш в производительности - трансформируем мы только 4(!!!) точки
3.
Перед каждой прорисовкой вычислять пространственные координаты модели по ее кубическим координатам. Для этого требуется примерно столько же действий, как и при использовании формул вращения, но, как мы знаем, линейная интерполяция очень неплохо оптимизируется на ассемблере, так что и здесь можно получить небольшой выигрыш. Правда он будет очень небольшим.
.
Выводы
Данный метод представляет собой хорошую альтернативу современным методам трансформации.
Надеюсь, кто-нибудь заставит его работать быстрее существующих. Кстати, а ведь кубы могут
параллельно очень неплохо пригодиться и в расчете столкновений объектов, так что если кто
заинтересован в создании приложения, применяющего этот метод, пишите мне на mi81@bay.da.ru.