2010-05-17 27 views
0

我利用一些2d/3d跟踪数据(由pfHoe提供)来帮助将某些3D模型集成到某些2d视频的播放中。使用2d视频合成3d模型需要更复杂的视图矩阵计算

事情工作....好吧......但仍有一些可视的'滑倒'的模型对视频背景,我怀疑这可能是因为XNA CreatePherspective辅助方法没有考虑到一些由pfHoe提供的附加数据,例如独立的水平/垂直视场角和焦距。

任何人都可以指出我构建包含这些细节的视图矩阵的一些例子吗?

回答

1

这MSDN文章说明了如何写这产生
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 

数学在进一步解释的立体矩阵,其独立地考虑到了水平和垂直FOV(尽管,在C++)的方法上面链接的文章帮助您编写此方法的C#版本。祝你好运:-)

+0

嗯...我可能要多一点,因为我在C#中的第一个解释给出了一些...奇怪的...结果... :) 私人矩阵CreateProjection(float horizo​​ntalFov ,float verticalFov,floatPlane,float farPlane) var w = 1f /(float)Math.Tan(horizo​​ntalFov * 0.5f); var h = 1f /(float)Math.Tan(verticalFov * 0.5f); var q = farPlane /(farPlane - nearPlane); 返回新的矩阵(w,0,0,0,0,h,0,0,0,0,q,1,0,0,-q * nearPlane,0); } – lzcd 2010-05-19 11:43:01

相关问题