0

我正在为基于 DirectX 11 的 3ds max 编写渲染器插件。

我从 3ds max 得到实际的视口矩阵,在反转后看起来:[Rx Ry Rz] [Ux Uy Uz] [Dx Dy Dz] [Px Py Pz]

  • 其中 R 代表 Right,U 代表 Up,D id 方向,P 代表 Position。

我将此视图矩阵应用于 DirectX(我基于 rastertek 教程:http ://www.rastertek.com/dx11tut04.html ),但我没有创建自己的视图矩阵,而是使用 3ds max 的这个视图矩阵,它基本上相同的结构:[Rx Ry Rz 0] [Ux Uy Uz 0] [Dx Dy Dz 0] [Px Py Pz 1]

起初一切似乎都很好,因为最大视口中的视图和 DirectX 窗口中的渲染视图看起来几乎相同。但是最大视口和 DirectX 窗口中的变换并不相同。看起来像:当我在最大移动相机位置时,DirectX 中的相机目标正在移动,而当我在最大移动相机目标(或旋转相机)时,DirectX 中的相机位置正在移动。

感谢您的帮助...我无法弄清楚 3 天...

4

1 回答 1

0

我终于找到了解决方案...

首先,我从 3ds max 矩阵中获取方向和位置并手动创建视图矩阵,但使用:D3DXMatrixLookAtRH 和 D3DXMatrixPerspectiveFovRH(用于投影矩阵)而不是 D3DXMatrixPerspectiveFovLH 和 D3DXMatrixLookAtLH,它们解决了大多数问题......

然后,我注意到在平移相机期间未更新 3ds max 矩阵(仅更新了位置),因此,为了查看视图矩阵中的向量,我使用了“位置方向”...

于 2012-09-19T10:25:18.323 回答