基於Dx11寫乙個自己的遊戲引擎 5

2021-09-25 07:58:03 字數 2761 閱讀 9855

d2d初始化時,需要:

id2d1factory*型別的物件,也就是d2d工廠介面,這個介面是所有d2d程式的起始點,幾乎所有的d2d資源都是由這個介面建立;

render target,在d2d中有多種型別的render target,這裡我們選擇id2d1hwndrendertarget型別,用來在視窗中進行渲染;

brush,用來繪製圖形,這裡選擇固定顏色的畫刷,即id2d1solidcolorbrush。

注意標頭檔案需要引入包含檔案,並鏈結相關庫。

//direct2d 標頭檔案

#include #include //鏈結相關庫

#pragma comment(lib,"d2d1.lib")

這裡的用處是引入微軟自己提供的comptr智慧型指標庫,方便記憶體的管理,具體使用方式可以參考

directx11--comptr智慧型指標

comptrm_pfactory;

comptrm_prendertarget;

comptrm_plightslategraybrush;

comptrm_pcornflowerbluebrush;

//初始化direct2d所需資源

hresult hr;

//建立工廠

//引數1 ,工廠型別,單執行緒or多執行緒 引數2 ,工廠位址

hr=d2d1createfactory( d2d1_factory_type_single_threaded, m_pfactory.getaddressof() );

if (failed(hr))

//建立rendertarget

//引數1:屬性,包括渲染模式,畫素格式,dpi等。這裡使用預設

//引數2:size

hr = m_pfactory->createhwndrendertarget( d2d1::rendertargetproperties(), d2d1::hwndrendertargetproperties( m_hmainwnd, d2d1::sizeu( m_clientwidth, m_clientheight ) ),

m_prendertarget.getaddressof() );

if (failed(hr))

//建立兩個筆刷

hr = m_prendertarget->createsolidcolorbrush( d2d1::colorf( d2d1::colorf::lightslategray ), m_plightslategraybrush.getaddressof() );

hr = m_prendertarget->createsolidcolorbrush( d2d1::colorf( d2d1::colorf::cornflowerblue ), m_pcornflowerbluebrush.getaddressof() );

if ( failed( hr ) )

return true;

}

hresult hr;

m_prendertarget->begindraw();

//設定背景顏色

m_prendertarget->clear( d2d1::colorf( d2d1::colorf::white ) );

//繪製灰色背景

int width = m_clientwidth;

int height = m_clientheight;

for ( int x = 0; x < width;x+=10 )

for ( int y = 0; y < height; y += 10 )

//繪製兩個矩形

d2d1_rect_f rectangle1 = d2d1::rectf(width / 2 - 50.0f, height / 2 - 50.0f,width / 2 + 50.0f, height / 2 + 50.0f );

d2d1_rect_f rectangle2 = d2d1::rectf( width / 2 - 100.0f,height / 2 - 100.0f,width / 2 + 100.0f, height / 2 + 100.0f );

// draw a filled rectangle

m_prendertarget->fillrectangle( &rectangle1, m_plightslategraybrush.get() );

// draw a outline only rectangle

m_prendertarget->drawrectangle( &rectangle2, m_pcornflowerbluebrush.get() );

hr = m_prendertarget->enddraw();

// finalizedirect2d();

}run():

//返回值為應用程式退出返回值

msg msg = ;

while ( msg.message != wm_quit ) else }}

//如果訊息為退出,釋放資源

finalizedirect2d();

return (int) msg.wparam;

}

用md中**塊的話不知道為什麼**排版很奇怪,原始碼位址

執行結果:

寫乙個自己的遊戲引擎

以下是我的一點看法,另外推薦一些學習的資料 ps 小弟才搞3d一年的時間,還是cn,高手不要笑話,還請大家多多指點 首先是語言方面,這個問題沒有太多的選擇的餘地,基本上只有用c 現在還在堅持用純c來寫引擎的估計只有卡馬克同學了 語言的功底是特別重要的了 大規模專案的編寫能力也是很重要的,推薦看 大規...

自己寫的乙個Vue

下面這裡是我自己寫的乙個小型的vue,原理就是proxy proxy天生沒有prototype,因此要加上,不然extends會報錯 proxy.prototype proxy.prototype object.prototype class myvue extends proxy super da...

自己寫的乙個快速排序

呵呵 今天沒事看了看 快速排序的基本思想後寫了乙個快排的demo 發到部落格上做個備份 public class quicksort public static void quicksort int l,int u int m l for int i l 1 i u i swap l,m quick...