Частный случай выпуклого полиэдра, базовый куб (generic cube), заслуживает особого внимания. Центр его расположен в начале координат, а углы лежат в точках (±1, ±1, ±1), где использованы все восемь комбинаций +1 и -1. Ребра базового куба направлены вдоль координатных осей, а шесть его граней лежат в плоскостях, которые показаны в табл. 14.1. Для упрощения визуализации базового куба каждой плоскости присвоено название согласно тому, как она видна из точки вида (0,0,10). В таблице приводится внешняя нормаль к каждой из плоскостей, а также характерная точка - пятно, лежащее на этой плоскости.
Таблица 14.1. Шесть плоскостей, определяющих базовый куб
Плоскость |
Название |
Уравнение |
Внешняя нормаль |
Пятно |
Верхняя (top) |
у=1 |
(0, 1, 0) | (0,1, 0) | |
Нижняя (bottom) |
у=-1 |
(0,-1, 0) | (0,-1,0) | |
Правая (right) |
х= 1 |
(1, 0, 0) | (1, 0, 0) | |
Левая (left) |
х=-1 |
(-1, 0, 0) | (-1, 0, 0) | |
Передняя (front) |
z= 1 | (0, 0,1) | (0, 0, 1) | |
Задняя (back) |
z=-l | (0,0,-1) | (0, 0,-1) |
14.6. Пересечение лучей с другими примитивами Базовый куб важен по следующим двум причинам: О С помощью аффинного преобразования базового куба может быть смоделировано и помещено на сцену большое количество разнообразных и интересных «блоков». Затем при трассировке лучей каждый луч может быть подвергнут обратному преобразованию в системе координат базового куба, поэтому мы можем использовать подпрограмму пересечения луча с базовым кубом (которую можно сделать весьма эффективной).
О Базовый куб можно использовать как экстент (extent) для других базовых примитивов в качестве ограничивающего параллелепипеда (bounding box): каждый базовый примитив, например цилиндр, прекрасно вписывается в такой куб. Как мы увидим позднее, часто весьма эффективно проверять пересечение луча с экстентом объекта перед тем, как выяснять соударение луча с самим объектом, особенно если подпрограмма пересечения луча с объектом является дорогостоящей с вычислительной точки зрения. Если луч проходит мимо экстента, то он обязательно пройдет и мимо объекта. Поэтому получить в свое распоряжение высокоэффективный алгоритм пересечения луча с базовым кубом - большое достижение.