我正在利用一些2d / 3d跟踪数据(由pfHoe提供)来帮助将一些3d模型集成到一些2d视频的播放中。
一切都很顺利……好吧..。但相对于视频背景,模型仍然有一些明显的“滑动”,我怀疑这可能是因为XNA CreatePerspective辅助方法没有考虑到pfHoe提供的一些额外数据,例如独立的水平/垂直视场角度和焦距。
谁能给我指出一些构造包含这些细节的视图矩阵的例子?
发布于 2010-05-18 20:50:26
这篇MSDN文章向您展示了如何编写一个方法来创建独立考虑水平和垂直视野的透视矩阵(尽管是在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#版本。祝你好运:-)
https://stackoverflow.com/questions/2846166
复制相似问题