Требуется более сложный расчет матрицы вида для составных 3d моделей с 2d видео - PullRequest
0 голосов
/ 17 мая 2010

Я использую некоторые 2d / 3d данные отслеживания (предоставленные pfHoe ), чтобы помочь интегрировать некоторые 3d модели в воспроизведение некоторых 2d видео.

Все работает ... хорошо ... но все еще наблюдается некоторое "скольжение" моделей на фоне видео, и я подозреваю, что это может быть связано с тем, что вспомогательный метод XNA CreatePerspective не учитывает некоторые из дополнительные данные, предоставленные pfHoe, такие как независимые горизонтальные / вертикальные углы поля зрения и фокусное расстояние.

Кто-нибудь сможет указать мне на примеры построения матриц вида, которые включают такие детали?

1 Ответ

1 голос
/ 18 мая 2010

В этой статье MSDN показано, как написать метод, который создает матрицу перспективы, которая независимо учитывает горизонтальное и вертикальное FOV (хотя и в C ++)
http://msdn.microsoft.com/en-us/library/bb147302%28VS.85%29.aspx

D3DXMATRIX 
ProjectionMatrix(const float near_plane, // Distance to near clipping 
                                         // plane
                 const float far_plane,  // Distance to far clipping 
                                         // plane
                 const float fov_horiz,  // Horizontal field of view 
                                         // angle, in radians
                 const float fov_vert)   // Vertical field of view 
                                         // angle, in radians
{
    float    h, w, Q;

    w = (float)1/tan(fov_horiz*0.5);  // 1/tan(x) == cot(x)
    h = (float)1/tan(fov_vert*0.5);   // 1/tan(x) == cot(x)
    Q = far_plane/(far_plane - near_plane);

    D3DXMATRIX ret;
    ZeroMemory(&ret, sizeof(ret));

    ret(0, 0) = w;
    ret(1, 1) = h;
    ret(2, 2) = Q;
    ret(3, 2) = -Q*near_plane;
    ret(2, 3) = 1;
    return ret;
}   // End of ProjectionMatrix

Математика более подробно объясняется в статье, приведенной выше, чтобы помочь вам в написании C #-версии этого метода. Удачи: -)

...