Нужна помощь с функцией Direct 3D LookAt - PullRequest
0 голосов
/ 23 сентября 2010

Мне нужна некоторая концептуальная помощь с функцией Direct3D ....В своей официальной документации они говорят, что вычисление, которое имеет место, может быть суммировано с этим:

zaxis = нормальный (At - Eye) xaxis = нормальный (cross (Up, zaxis)) yaxis = cross (zaxis,xaxis)

xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0 - точка (xaxis, глаз) - точка (yaxis,eye) -dot (zaxis, eye) l

Что я не понимаю, что происходит с функцией 'normal ()', используемой в первых двух строках?Как я могу нормально вычисляться с двумя векторами ?!Разве нормаль не рассчитана для плоскости?!

Во второй строке normal () работает только с одним вектором (поскольку cross (Up, zaxis) вернул бы один трехмерный вектор) ..

Так что в основном мне нужно знать, что подразумевается под использованием normal () в первых двух уравнениях ..

Мне нужно это, чтобы попрактиковаться в выполнении этого вычисления вручную самостоятельно.

1 Ответ

0 голосов
/ 23 сентября 2010

функция normal () нормализует вектор.

Вектор имеет мужскую длину. Это определяется как:

length = sqrtf( (x * x) + (y * y) + (z * z) );

Итак, если у вас есть вектор, определенный как (10, 0, 0), который даст вам длину

length = sqrtf( (10 * 10) + (0 * 0) + (0 * 0) );

Это хороший простой расчет, возвращающий длину / величину 10.

Теперь нормальный вектор имеет величину 1. Итак, вы можете легко увидеть выше, что, разделив каждый элемент вектора на величину, вы получите длину / величину 1.

Так что обычная функция просто делает:

const float length = sqrtf( (vx*vx) + (vy*vy) + (vz*vz) );
vx                 = vx / length;
vy                 = vy / length;
vz                 = vz / length;
...