D3D9 GetTransform不工作,Windows XP
问题描述:
在我DrawIndexedPrimite功能我有:D3D9 GetTransform不工作,Windows XP
myDevice->GetTransform(D3DTS_VIEW, &view_matrix);
myDevice->GetTransform(D3DTS_PROJECTION, &proj_matrix);
myDevice->GetTransform(D3DTS_WORLD, &world_matrix);
myDevice->GetViewport(&d3dvp);
这在Windows 7上正常工作:
View Matrix:
view_matrix._11 : -1
view_matrix._12 : -8.74095e-008
view_matrix._13 : -0
view_matrix._14 : 0
view_matrix._21 : 8.73962e-008
view_matrix._22 : -0.999848
view_matrix._23 : -0.0174524
view_matrix._24 : 0
view_matrix._31 : -1.5255e-009
view_matrix._32 : 0.0174524
view_matrix._33 : -0.999848
view_matrix._34 : 0
view_matrix._41 : -32.4
view_matrix._42 : 23.3582
view_matrix._43 : 39.061
view_matrix._44 : 1
Projection Matrix:
proj_matrix._11 : 1.19175
proj_matrix._12 : 0
proj_matrix._13 : 0
proj_matrix._14 : 0
proj_matrix._21 : 0
proj_matrix._22 : 1.60573
proj_matrix._23 : 0
proj_matrix._24 : 0
proj_matrix._31 : -0
proj_matrix._32 : -0
proj_matrix._33 : 1.00025
proj_matrix._34 : 1
proj_matrix._41 : 0
proj_matrix._42 : 0
proj_matrix._43 : -0.125031
proj_matrix._44 : 0
World Matrix:
world_matrix._11 : 0.0245525
world_matrix._12 : -0.00470921
world_matrix._13 : 0
world_matrix._14 : 0
world_matrix._21 : -0.00470921
world_matrix._22 : -0.0245525
world_matrix._23 : 3.7749e-009
world_matrix._24 : 0
world_matrix._31 : -7.11072e-010
world_matrix._32 : -3.70732e-009
world_matrix._33 : -0.025
world_matrix._34 : 0
world_matrix._41 : -54.0003
world_matrix._42 : 5.19991
world_matrix._43 : 8.63542
world_matrix._44 : 1
Viewport:
d3dvp.X : 0
d3dvp.Y : 0
d3dvp.Width : 1024
d3dvp.Height : 760
d3dvp.MinZ : 0
d3dvp.MaxZ : 1
但在Windows XP中,我得到:
View Matrix:
view_matrix._11 : 1.88473e-017
view_matrix._12 : 1.68653
view_matrix._13 : 1.35358e-017
view_matrix._14 : 1
view_matrix._21 : 5.6036e-038
view_matrix._22 : 0
view_matrix._23 : 0
view_matrix._24 : 0
view_matrix._31 : 0
view_matrix._32 : 1.63149
view_matrix._33 : 0
view_matrix._34 : 0
view_matrix._41 : -0
view_matrix._42 : -0
view_matrix._43 : 1.00025
view_matrix._44 : 7.69183e+009
Projection Matrix:
proj_matrix._11 : 2.37597e-039
proj_matrix._12 : 2.08572e-039
proj_matrix._13 : 2.37597e-039
proj_matrix._14 : 2.37598e-039
proj_matrix._21 : 0
proj_matrix._22 : 1.73879e-039
proj_matrix._23 : 1.7389e-039
proj_matrix._24 : 8.22303e+009
proj_matrix._31 : -1.#QNAN
proj_matrix._32 : 1.73892e-039
proj_matrix._33 : 7.69167e+009
proj_matrix._34 : 2.37597e-039
proj_matrix._41 : 0
proj_matrix._42 : 3.27402e-039
proj_matrix._43 : 7.69167e+009
proj_matrix._44 : 2.37598e-039
World Matrix:
world_matrix._11 : 3.4712e-035
world_matrix._12 : 2.38806e-039
world_matrix._13 : 7.95398e-037
world_matrix._14 : 2.37598e-039
world_matrix._21 : 0
world_matrix._22 : 1.73887e-039
world_matrix._23 : 1.7394e-039
world_matrix._24 : 8.22302e+009
world_matrix._31 : 1.4013e-045
world_matrix._32 : 3.72838e-035
world_matrix._33 : 7.85314e-037
world_matrix._34 : 2.37597e-039
world_matrix._41 : 0
world_matrix._42 : 3.27402e-039
world_matrix._43 : 0
world_matrix._44 : 4.48416e-044
Viewport:
d3dvp.X : 0
d3dvp.Y : 0
d3dvp.Width : 1024
d3dvp.Height : 748
d3dvp.MinZ : 0
d3dvp.MaxZ : 1
这里最早的“正确”的东西似乎是视口。
任何建议如何“修复”?
在此先感谢。
答
GetTransform
失败但GetViewport
成功的常见情况是使用D3DCREATE_PUREDEVICE
创建设备的位置。
为GetTransform
,MSDN说:
此方法不适用于正在使用D3DCREATE_PUREDEVICE创建 设备返回设备状态。如果您想使用此方法,您必须使用D3DCREATE中的任何其他标志值来创建您的设备 。
然而,对于GetViewport
,MSDN说:
通常情况下,返回状态的方法将不是一个设备是使用D3DCREATE_PUREDEVICE创建 上工作。但是,此方法即使在纯设备上也可以使用 。
我怀疑设备创建被不同的处理方式上的两个操作系统。正如你用钩来标记你的问题,我猜你可能没有访问源代码,但如果你这样做 - 也许你可以发布设备创建部分。
好的。得到了你所说的。我试图将我的系统更改为代理dll。所以我知道应用程序正在将设备创建为PUREDEVICE。在createdevice部分,我可以删除D3DCREATE_PUREDEVICE,但随后会崩溃。任何想法替代? –
将接受这个答案,因为它完全解释了为什么我有这些问题。但也许有人可以提供进一步的“提示”如何解决这个问题(我甚至可以使用完整的代理DLL没有问题)。 –
但是,我不明白的是,为什么它在Win Vista/7/8上运行,而不是在XP上运行。 –