NeHe OpenGL第三十四課 地形

2021-09-03 06:27:06 字數 1791 閱讀 3816

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 定義無參無...