基於C 的 DirectX開發(基礎篇)二

2021-06-16 04:21:49 字數 2137 閱讀 2136

三維三角形的開發

這裡要引入乙個概念:投影

以下是投影函式的簽名:

public static matrix perspectivefovlh( float fieldofviewy,float aspectratio,float znearplane,float zfarplane);

投影變換描繪了場景的視見体(注:即可見部分)。視見体是由可視角度和前裁剪面(near plane

)與後裁剪面(

far plane

)定義的乙個平截頭體(注:比如四稜錐橫截面與底面之間的部分,上帝保佑,你還記得高中幾何),在這個平截頭體之內的即是可見部分。函式頭里的

nearplane

和farplane

兩個引數,描繪了錐體的邊界:

farplane

就是錐體的底面

(遠平面的距離)

,而nearplane

則是橫截面

(近平面的距離)

。fieldofview

引數描繪了錐體的角度。

aspectratio

類似於電視的高寬比,比如,寬銀幕電視的高寬比是

1.85

。你可以用可視區域的寬度來比上高度得出這個值。

directx3d

只繪製在這個平截頭體中的物體。

既然我沒從來沒有進行過投影變換,也就根本不存在乙個視見体,應此directx3d

什麼也沒有繪製。但是,就算我們進行了投影變換,我們還沒有進行包含了攝像機資訊的

view transform

。可以用一下函式完成這個任務:

public static matrix lookatlh(matrix pout, vector3 cameraposition, vector3 cameratarget, vector3 cameraupvector)

;僅僅通過各變數的名字你就可以知道如何使用這個函式。其中三個是用來描述攝像機的屬性:它的位置、它觀察點的位置以及乙個被參考為「up」

的方向。有了投影變換和

view transform

的幫助,

directx3d

已經有足夠的資訊來繪製三角了。

vector3 eye=new vector3(0, 0, -30);

vector3 at=new vector3(0, 0, 0);

vector3 up=new vector3(0, 1, 0);

eye表示攝像機位置,

at表示攝像機目標位置,

up表示向上的方向,通常為(

0, 1, 0)

具體**:

public

partial

class

cameraform

: form

///

///初始化繪圖類device

///

///是否成功

public

boolean

initializedirect3d()

catch

(directxexceptione)

} public

void

render()

device.clear(

clearflags

.target, system.drawing.

color

.whitesmoke, 1.0f, 0); 

//清除窗體,並將其繪製成白色

device.beginscene();

//新增渲染**

********();

device.renderstate.lighting = 

false

;//將燈光關閉,否則圖形是黑色的

device.endscene();

device.present(); }

static

void

main()

basicform.show();

while

(basicform.created)

} ///

///繪製乙個三角形

///

public

void

********()

}

基於C 的DirectX開發(基礎篇)一

開發環境 visual studio 2008 directx9 sdk 1.在 vs2008 下選擇建立 windows 下的乙個空專案。2.為專案新增引用,引入 microsoft.directx microsoft.directx.directx3d microsoft.directx.dir...

DirectX的開發環境配置

本環境設定在 windows xp visual c 6.0 directx 8.0 工程 設定 連線 工程選項 可以新增下面的輸入庫 ddraw.lib directdraw dinput.lib directinput dinput8.lib directinput8 dsound.lib di...

基於C 開發的2048

昨天花了一晚上的時間寫了乙個過氣的小遊戲 2048,一直到晚上十二點多才把鍵盤響應事件寫好,感覺自己的腦子不行,還要再補補。先來一波執行的效果 主要演算法,可以實現不同邊長的2048 2private void up 316 17 18 19 20private void up remove bla...