nehe opengl第三十四課:地形
從高度圖生成地形:
這一課將教會你如何從乙個2d的灰度圖建立地形
歡迎來到新的一課,ben humphrey寫了這一課的**,它是基於第一課所寫的。
在這一課裡,我們將教會你如何使用地形,你將知道高度圖這個概念。
下面我們來定義一些全域性變數,map_size是你使用的高度圖的大小,在這一課裡我們使用1024*1024的地圖。step_size設定高度圖中相鄰頂點之間的距離。height_ratio設定在高度方向的縮放比例,越大地形看起來越陡峭。brender設定使用多邊形還是線繪製地形。
#define map_size 1024
#define step_size 16 // 相鄰頂點的距離
#define height_ratio 1.5f
bool brender = true; // true為多邊形渲染,false為線渲染
下面的**用來儲存高度資料
byte g_heightmap[map_size*map_size]; // 儲存高度資料
float scalevalue = 0.15f; // 地形的縮放比例
下面的函式從檔案中載入高度資料
// 從*.raw檔案中載入高度資料
void loadrawfile(lpstr strname, int nsize, byte *pheightmap)
// 讀取檔案資料到pheightmap陣列中
fread( pheightmap, 1, nsize, pfile );
// 讀取是否成功
int result = ferror( pfile );
// 如果不成功,提示錯誤退出
if (result)
// 關閉檔案
fclose(pfile);}
initgl函式基本沒有變化,只是加入了載入高度圖的函式
// 載入1024*1024的高度圖道g_heightmap陣列中
loadrawfile("data/terrain.raw", map_size * map_size, g_heightmap);
下面的函式返回(x,y)點的高度
int height(byte *pheightmap, int x, int y) // 下面的函式返回(x,y)點的高度
按高度設定頂點的顏色,越高的地方越亮
void setvertexcolor(byte *pheightmap, int x, int y) // 按高度設定頂點的顏色,越高的地方越亮
下面的函式在opengl中,根據高度圖渲染輸出地形
void renderheightmap(byte pheightmap) // 根據高度圖渲染輸出地形
glend();
glcolor4f(1.0f, 1.0f, 1.0f, 1.0f); // 重置顏色}
drawglscene函式基本沒變化,只是設定了視點和縮放係數,呼叫上面的函式繪製出地形。
// 設定視點
glulookat(212, 60, 194, 186, 55, 171, 0, 1, 0);
glscalef(scalevalue, scalevalue * height_ratio, scalevalue);
renderheightmap(g_heightmap); // 渲染高度圖
return true; }
wndproc()函式基本沒有變化,只是加入了單擊左鍵的相應函式
NeHe OpenGL第三十四課 地形
nehe opengl第三十四課 地形 從高度圖生成地形 這一課將教會你如何從乙個2d的灰度圖建立地形 歡迎來到新的一課,ben humphrey寫了這一課的 它是基於第一課所寫的。在這一課裡,我們將教會你如何使用地形,你將知道高度圖這個概念。下面我們來定義一些全域性變數,map size是你使用的...
第三十四課 光柵和解析度
1.多縫干涉 n個相干等距光源的干涉圖樣 某一點兩個光源相長干涉時,那麼另兩個也在這裡相長干涉 n d 相消干涉則會很複雜 0級亮紋,一級亮紋.相鄰兩個相長干涉之間會有n 1個相消點 間距 nd 2.光柵可以用於原子物理學,分析原子所發出不同波長的光所形成的光譜 3.單縫干涉 衍射 最大值 0 最小...
python第三十四課 1 匿名函式的定義和使用
演示匿名函式的定義和使用 定義無參有返回值的有名函式 deffunc return true 定義無參有返回值的匿名函式 f lambda true 呼叫有名函式執行 print func 呼叫匿名函式執行 print f 定義無參無返回值的有名函式 deffunc print true 定義無參無...