Как определить, какая сторона трехмерной плоскости отображается? - PullRequest
0 голосов
/ 24 мая 2010

Это вопрос 3d n00b.

Я работаю над элементом управления WPF, который реализует основы функции PerspectiveTransform Silverlight, позволяя поворачивать 2D-плоскость по любой из трех осей.Это работает довольно хорошо.Однако я немного застрял на математике, необходимой для определения того, показывает ли заднюю часть самолета.Мой наивный код для определения этого сейчас:

bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90;
if (!isBackShowing)
{
    isBackShowing = Math.Abs(RotationX) < 90 && Math.Abs(RotationY) > 90;
}

Однако, это не работает, когда вращение находится между + -270 и + -360 по любой оси.

Базовое преобразование используетобъект Quaternion для фактического вращения, и он имеет хорошие свойства Axis и Angle, так что я думаю, я мог бы просто использовать это, если бы знал как.

1 Ответ

5 голосов
/ 24 мая 2010

Вам нужно сделать скалярное произведение плоскости нормали и направления обзора.

Если оно положительное, то самолет направлен от вас.

Если оно отрицательное, тогда самолет направлен к вам.

Если он равен нулю, значит, вы смотрите на край плоскости.

Чтобы найти нормаль к плоскости, возьмите любые три точки на плоскости - назовем их OA и B. Перенесем векторы из O в A и O в B. Если вы возьмите перекрестное произведение этих двух векторов, вы получите нормальный. Будьте внимательны, так как порядок выполнения расчетов имеет значение. Хорошая книга / веб-сайт по трехмерной геометрии окажет неоценимую помощь

1012 * Википедия *

...