2014-01-28 41 views
1

在我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 

這裏最早的「正確」的東西似乎是視口。

任何建議如何「修復」?

在此先感謝。

回答

1

GetTransform失敗但GetViewport成功的常見情況是使用D3DCREATE_PUREDEVICE創建設備的位置。

GetTransform,MSDN說:

此方法不適用於正在使用D3DCREATE_PUREDEVICE創建 設備返回設備狀態。如果您想使用此方法,您必須使用D3DCREATE中的任何其他標誌值來創建您的設備 。

然而,對於GetViewport,MSDN說:

通常情況下,返回狀態的方法將不是一個設備是使用D3DCREATE_PUREDEVICE創建 上工作。但是,此方法即使在純設備上也可以使用 。

我懷疑設備創建被不同的處理方式上的兩個操作系統。正如你用來標記你的問題,我猜你可能沒有訪問源代碼,但如果你這樣做 - 也許你可以發佈設備創建部分。

+0

好的。得到了你所說的。我試圖將我的系統更改爲代理dll。所以我知道應用程序正在將設備創建爲PUREDEVICE。在createdevice部分,我可以刪除D3DCREATE_PUREDEVICE,但隨後會崩潰。任何想法替代? –

+0

將接受這個答案,因爲它完全解釋了爲什麼我有這些問題。但也許有人可以提供進一步的「提示」如何解決這個問題(我甚至可以使用完整的代理DLL沒有問題)。 –

+0

但是,我不明白的是,爲什麼它在Win Vista/7/8上運行,而不是在XP上運行。 –

相關問題