DirectX 3D 基本框架 四

2021-04-21 06:57:25 字數 4132 閱讀 9386

繼續擴充套件原來的d3d基本框架。這次將新增地形類庫。做出如下修改:

1.增加乙個terrain頭/庫檔案。

**清單:

// // 

// file: terrain.h

// 

// by tianzhihen

// // 2008.10.27, msvc++ 8.0 

//          

// #ifndef __terrainh__

#define __terrainh__

#include "d3dutility.h"

#include 

#include 

class terrain

terrainvertex(float x, float y, float z, float u, float v)

float _x, _y, _z;

float _u, _v;

static

const

dword fvf;

};};

#endif // __terrainh__

// // 

// file: terrain.cpp

// 

// by tianzhihen

// // 2008.10.27, msvc++ 8.0 

//          

// #include "terrain.h"

#include 

#include 

const

dword terrain::terrainvertex::fvf = d3dfvf_xyz | d3dfvf_tex1;

terrain::terrain(idirect3ddevice9* device,

std::string heightmapfilename,

int numvertsperrow,

int numvertspercol,

int cellspacing,

float heightscale)

// 縮放高度

for(int i = 0; i < _heightmap.size(); i++)

_heightmap[i] *= heightscale;

// 計算頂點座標

if( !computevertices() )

// 計算索引座標

if( !computeindices() )

}terrain::~terrain()

int terrain::getheightmapentry(int row, int col)

void terrain::setheightmapentry(int row, int col, int value)

bool terrain::computevertices()

i++; // next row

}_vb->unlock();

return

true;

}bool terrain::computeindices()

}_ib->unlock();

return

true;

}bool terrain::loadtexture(std::string filename)

bool terrain::gentexture(d3dxvector3* directiontolight)

}_tex->unlockrect(0);

//紋理過濾  

hr = d3dxfiltertexture(

_tex,

0, // default palette

0, // use top level as source level

d3dx_default); // default filter

if(failed(hr))

return

true;

}float terrain::computeshade(int cellrow, int cellcol, d3dxvector3* directiontolight)

bool terrain::readrawfile(std::string filename)

float terrain::getheight(float x, float z)

else

// 點位於下三角dcb

return height;

}bool terrain::draw(d3dxmatrix* world, bool drawtris)

if(failed(hr))

return

false;

}return

true;}

2.增加乙個fps類(計算幀頻)

**清單:

// // 

// file: fps.h

// 

// by tianzhihen

// // 2008.10.27, msvc++ 8.0 

//          

// #ifndef __fpsh__

#define __fpsh__

#include "d3dfont.h"

class fpscounter

;#endif // __fpsh__

// // 

// file: fps.cpp

// 

// by tianzhihen

// // 2008.10.27, msvc++ 8.0 

//          

// #include "fps.h"

#include 

fpscounter::fpscounter(idirect3ddevice9* device)

fpscounter::~fpscounter()

}bool fpscounter::render(d3dcolor color, float timedelta)

_font->drawtext(20, 20, color, _fpsstring); 

}return

true;

}3.增加相應dx框架檔案。因為fps類用到了d3dfont.h標頭檔案,因此需新增相應的框架檔案。列舉如下:

d3dfont.h   d3dfont.cpp   dxutil.h   dxutil.cpp   d3dutil.h   d3dutil.cpp 

4.保持camera類不變。d3dutility.cpp新增lerp()函式。

float d3d::lerp(float a, float b, float t)

相應的d3dutility.h須包含此函式宣告。

float lerp(float a, float b, float t);

5.在d3dutility.h中新增一些顏色常量。

const d3dxcolor beach_sand( d3dcolor_xrgb(255, 249, 157) );

const d3dxcolor desert_sand( d3dcolor_xrgb(250, 205, 135) );

const d3dxcolor lightgreen( d3dcolor_xrgb( 60, 184, 120) );

const d3dxcolor  puregreen( d3dcolor_xrgb(  0, 166,  81) );

const d3dxcolor  darkgreen( d3dcolor_xrgb(  0, 114,  54) );

const d3dxcolor light_yellow_green( d3dcolor_xrgb(124, 197, 118) );

const d3dxcolor  pure_yellow_green( d3dcolor_xrgb( 57, 181,  74) );

const d3dxcolor  dark_yellow_green( d3dcolor_xrgb( 25, 123,  48) );

const d3dxcolor lightbrown(d3dcolor_xrgb(198, 156, 109));

const d3dxcolor darkbrown( d3dcolor_xrgb(115, 100,  87));

Directx3D框架程式

include include lpdirect3d9 g pd3d null lpdirect3ddevice9 g pd3ddevice null hresult initalized3d hwnd hwnd return true void render g pd3ddevice presen...

DirectX 3d 取景變換

在世界座標系中,幾何體和攝像機都是相對於世界座標系定義的。但是當攝像機的位置和朝向任意時,投影變換及其它型別的變的就略顯困難或效率不高。為了簡化運算,我們將攝像機變的至世界座標系原點,並將其旋轉,使攝像機的光軸與世界座標系z軸正方向一致。同時,世界空間中的所有幾何幾都隨著攝像機一同進行變換,以保證攝...

DirectX3D中繪製立方體

idirect3ddevice9 g device null idirect3dvertexbuffer9 g vb 0 立方體頂點 idirect3dindexbuffer9 g ib 0 索引資料 struct vertex vertex float x,float y,float z floa...