繼續擴充套件原來的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...