Теперь, когда вы имеете два меша, с которыми будете работать (исходный и целевой), вы можете начинать процесс морфирования. Помните, что морфирование - это процесс изменения одной формы на другую. Необходимо чтобы вершины исходногомеша, находящиеся в начальном положении, постепенно двигались к положению вершин целевого меша.
Вы можете измерять интервал времени, используемый для отслеживания движения вершин из координат исходного меша в координаты целевого, при помощи скаляра (находящегося в диапазоне от 0 до 1). При значении скаляра, равного 0, вершины будут расположены в исходном меше, в то время как при значении скаляра 1 вершины будут располагаться в целевом меше. На рис. 8.3 показано, что любое значение скаляра от 0 до 1 расположит вершины между положением исходного и целевого меша.
Вычислять координаты расположения вершины между исходным и целевым мешами очень просто. Возьмите вершину исходного меша и умножьте ее координаты на обратное значение скаляра (1.0-8са1аг). Использование обратного значения скаляра означает, что координаты вершины будут определяться на 100 процентов координатами ее в исходном меше при значении скаляра, установленного в 0, и на 0 процентов при скаляре, установленном в 1.

Рис 8.3. Начиная с координат в исходном меше (и значении скаляра 0), вершина постепенно движется к положению в целевом меше по мере увеличения скаляра
Далее, используя вершину, имеющую тот же самый индекс целевого меша, что и ранее, умножьте ее координаты на значение скаляра. Сложив два получившихся значения, вы получите результирующие координаты вершины в сморфированной анимации.
Сначала концепция умножения координат вершины на скаляр и последующее сложение результатов может показаться странным. Если вы не уверены в математике, проделайте следующие вычисления, чтобы убедиться в правильности полученного результата. Используйте одномерное значение для представления координат вектора. Установите координату исходной точки в 10, а координату целевой точки в 20. Для упрощения, используйте значение скаляра равное 0.5, которое должно дать 15, в качестве результирующей координаты вершины при морфинге.
Умножив исходную координату (10) на 1-0.5 получим 5. Умножив целевую координату (20) на 0.5 получим 10. Сложив два результата (5 и 10) получим 15. Разве не замечательно - получить правильный результат!
Эту процедуру можно записать в виде следующего кода, полагая что координаты исходной вершины хранятся в vecSource, координаты целевой вершины хранятся в vecTarget, а'значение скаляра в Scalar.
// vecSource = D3DXVECTOR3 содержащий исходные координаты // vecTarget = D3DXVECTOR3 содержащий целевые координаты // Scalar = FLOAT содержащее значение скаляра
// Умножить исходные координаты на исходный скаляр D3DXVECTOR3 vecSourcePos = vecSource * (1.0f-Scalar);
// Умножить целевые координаты на скаляр D3DXVECTOR3 vecTargetPos = vecTarget * Scalar;
// Сложить два получившихся вектора
D3DXVECTOR vecPos = vecSourcePos + vecTargetPos;
После выполнения последнего кусочка кода вектор будет содержать координаты, используемые для расположения вершины в сморфированной анимации. Конечно же, эти вычисления повторяются для каждой вершины в исходном меше. В следующем разделе вы увидите, как выполнять эти вычисления для создания собственных морфируемых мешей. Однако перед этим я хочу заметить кое-что о синхронизации морфирующей анимации.
До этого момента я игнорировал фактор времени: как продолжительность анимации (количество времени, требуемого морфирующей анимации для перемещения из исходного в целевое положение), так и точный момент времени из последовательности анимации, в который вычисляются координаты. Полагая, что вы измеряете время в миллисекундах и продолжительность анимации хранится в Length (вещественное значение), а текущее время, в которое вы вычисляете координаты, хранится в Time (также вещественное значение), вы можете вычислить соответствующее значение скаляра, используемого в расчетах, так:
Scalar = Time / Length;
Используя вычисления, виденные вами в этом разделе, вы можете применить этот скаляр для расчета координат вершин, образующих морфируемый меш.
Уже второй раз я говорю о создании морфируемого меша, так что я больше не буду тянуть. Читайте далее, чтобы узнать, как создавать морфируемый меш, который вы можете использовать для визуализации. Хотя ранее я и замечал об использовании вершинных шейдеров, сначала я покажу вам самый простой путь создания морфируемых мешей - непосредственной обработкой буфера вершин меша.
⇐Определение исходного и целевого меша || Оглавление || Создание морфированного меша при помощи обработки⇒