Вращение 3D-камеры и рекламного щита XNA - PullRequest
2 голосов
/ 02 мая 2011

Не могли бы вы помочь мне ответить на следующие вопросы?

  1. Как мне повернуть (вокруг оси Z) * ​​1006 * положение камеры вокруг Vector3как поворот?
  2. Как мне повернуть (вокруг оси Z) * ​​1012 * четырехугольный объект , расположенный перед этой камерой, и убедиться, что квад всегдасмотрит на камеру вокруг того же поворота Vector3?

Изображение, поясняющее это ниже:

Image showing the concept of a billboard

Пожалуйста, ответьте, спасибо

Ответы [ 2 ]

1 голос
/ 17 сентября 2012

Обратите внимание, что у XNA есть помощник для этого Matrix.CreateBillboard (...), хотя если у вас есть доступ к матрице камеры, возможно, проще сделать следующее:

        var billboardWorld = Matrix.Invert(camera.ViewMatrix);
        billboardWorld.Translation = billboardPosition;
1 голос
/ 02 мая 2011

В дополнение к вращению камеры вокруг этой векторной точки вы также можете использовать ее в качестве цели, на которую смотрит камера.Тогда вам нужно всего лишь изменить положение камеры вокруг этой точки.Похоже, что вектор для создания камеры всегда будет оставаться неизменным.Вы упоминаете ось Z, но XNA - это система Y-up, поэтому из вашего изображения вы будете выполнять вращения вокруг оси Y.

Vector3 pivotPoint = new Vector3(?, ?, ?);
cameraPosition = Vector3.Transform(cameraPosition - pivotPoint, Matrix.CreateRotationY(anglePerFrame)) + pivotPoint;
View = Matrix.CreatLookAt(cameraPosition, pivotPoint, Vector3.Up);

Matrix billboardWorld = Matrix.Identity;
billBoardWorld.Forward = Vector3.Normalize(cameraPosition - pivotPoint);
billboardWorld.Right = Vector3.Normalize(Vector3.Cross(billboardWorld.Forward, Vector3.Up));
billboardWorld.Translation = cameraPosition - (billboardWorld.Backwards * distFromCamera);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...