DirectX中如何分屏顯示

2021-08-27 15:20:51 字數 1012 閱讀 3416

有人認為這個很難做,其實在directx中是很方便做到的,就是利用檢視轉換技術(viewport transform)

檢視其實就可以想象成乙個鏡頭口,對著什麼地方,就能顯示什麼地方的東西。而3d圖形裡面可以說是後台緩衝(back buffer)的所見的內容。一般遊戲都是把檢視視窗布滿整個back buffer的,但是我們可以把back buffer分隔開,以前的三國無雙是可以分上下屏,讓兩個玩家可以共用一台電腦來玩的。

direct3d的viewport的資料結構表示為:

typedef struct _d3dviewport9  d3dviewport9;
應用:

d3dviewport9 vp = ;

device->setviewport(&vp);

西面例子是把平面平均分為4個小視窗並顯示:

d3dviewport9 q1 = ;

d3dviewport9 q2 = ;

d3dviewport9 q3 = ;

d3dviewport9 q4 = ;

d3dviewport9 vps[4] = ;

通過迴圈把這些視窗都顯示出來:

gd3ddevice->beginscene();//開始畫圖迴圈畫4個螢幕,這是如何呼叫函式的地方

for(int i = 0; i < 4; ++i)

gd3ddevice->endscene();

direct3d自動幫我們計算如何放置這些viewports了, 不過其底層原理就是用viewport矩陣來轉換viewports的,這個矩陣也是用數學的公式計算出來的,矩陣非常複雜,一般記不住,不過要推導過,知道什麼回事。

下面是程式畫面:

vim分屏顯示

水平切割 split split 要開啟的檔名 new 在新視窗建立檔案 垂直切割 vsplit vsplit 要開啟的檔名 vnew 在新視窗建立檔案 only 取消 分屏h 跳轉到左邊的視窗 若為大寫h,則是把當前視窗調至左方 l 跳轉到右邊的視窗 類似於上 w 在視窗之間跳轉 擴大視窗 或在當...

vim 分屏顯示

水平切割 split split 要開啟的檔名 new 在新視窗建立檔案 k 跳轉到上面的視窗 若為大寫k,則是把當前視窗調至上方 j 跳轉到下面的視窗 類似於上 垂直切割 vsplit vsplit 要開啟的檔名 vnew 在新視窗建立檔案 only 取消分屏 h 跳轉到左邊的視窗 若為大寫h,則...

vim 分屏顯示

水平切割 split split 要開啟的檔名 new 在新視窗建立檔案 k 跳轉到上面的視窗 若為大寫k,則是把當前視窗調至上方 j 跳轉到下面的視窗 類似於上 垂直切割 vsplit vsplit 要開啟的檔名 vnew 在新視窗建立檔案 only 取消分屏 h 跳轉到左邊的視窗 若為大寫h,則...