Я пытаюсь придумать правильный алгоритм для создания матрицы, которая заставляет квадроцикл смотреть прямо в камеру, но у меня возникают трудности.
Четырехугольник, который я рисую, обращен вниз, вот код, который у меня есть:
D3DXVECTOR3 pos;
pos = D3DXVECTOR3(-2.0f, 6.0f, 0.1f);
D3DXMATRIX transform;
D3DXMatrixTranslation(&transform, pos.x, pos.y, pos.z);
D3DXVECTOR3 axis = D3DXVECTOR3(0, -1, 0);
D3DXVECTOR3 quadtocam = pos - EmCameraManager::Get().GetPosition();
D3DXVec3Normalize(&quadtocam,&quadtocam);
D3DXVECTOR3 ortho;
D3DXVec3Cross(&ortho, &axis, &quadtocam);
float rotAngle = acos(D3DXVec3Dot(&axis,&quadtocam));
D3DXMATRIX rot;
D3DXMatrixRotationAxis(&rot,&ortho,rotAngle);
transform = rot*transform;
Это работает, когда дело доходит до поворота квадроцикла к камере, однако он не остается в правильном положении, если смотреть на него со всех сторон.
На этом снимке экрана: https://imgur.com/hFmzc.png Слева четырехугольник если смотреть прямо (вектор равен 0,0,1), в другом - под произвольным углом.
Оба раза он обращен к камере, однако, когда под произвольным углом наклоняется вдоль своей локальной оси z. Я не уверен, как это исправить, и мне было интересно, каким будет следующий шаг?