如何實現D3D全屏與視窗的轉換

2021-06-08 23:11:52 字數 988 閱讀 9211

有很多遊戲會提供這樣的功能,比如足球經理,生化危機,魔獸世界等,這樣做最大的便利,是讓你可以在玩遊戲的同時做其他事情 ( i guess )。

1.首先要做的事情是為d3dpresentation_parameters設定好與此有關的引數,簡單的說就是,我們必須要讓device明確知道當前的top視窗是哪個,並且要知道這個視窗的長與寬,這樣device才能準確切換。

2.如果是從全螢幕切為視窗螢幕,我們需要修改d3dpresentation_parameters中的windowed為true。並設定fullscreen_refreshrateinhz為0。同時利用setwindowpos方法來確定把視窗放在什麼地方

3.如果是從視窗螢幕切為全螢幕,我們需要修改d3dpresentation_parameters中的windowed為false。並設定fullscreen_refreshrateinhz為d3dpresent_rate_default。儲存當前視窗的位置以供恢復

4.最後,我們需要把修改後的d3dpresentation_parameters設定到device中,並避免一切可能因為切換而產生lost的render target,如font等。

**例子如下(已封裝):

void jly_1dxrenderer::togglefullscreen()

else

//執行裝置丟失與重新設定操作

ondevicelost();

resetdevice(); 

//如果被恢復非全屏,則將當前視窗設定到原來位置(在全屏時儲存)

if (m_kpresent.windowed)

}void jly_1dxrenderer::resetdevice()

void jly_1dxrenderer::ondevicelost(){

//恢復裝置

ms_hresult = m_pqdevice->reset(&m_kpresent);

assert(succeeded(ms_hresult));

D3D的動作融合

d3d的動作融合 當遊戲主角由走路變為跑步時,如果生硬的切換動作。會不真實。最常見的辦法是將走路與跑步的動作進行插值融合。今天做了一下這部分的工作。效果還不錯。原理就是 d3dxmatrix tlerpmatrix tlerpmatrix 1 vactionlerp tbonematrix vact...

D3D的矩陣變換

物體座標 世界座標 視座標 投影座標 螢幕座標 這部分的說明已經不能再多了,但是有些細節其實d3d的文件中也比較難發現出來,還有些在文件中的解釋可能會讓人比較迷惑。1。視矩陣是什麼?參見 d3d的視矩陣是如何構造的 2。投影矩陣把z投影到 去了?我們在3d圖形學中學的投影矩陣是給出乙個平面,將3d空...

D3D中的渲染

虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...