地形文檔就是256色位圖文檔,因為位圖即點陣圖.點的數值越大地形越高,數值越低形成低窪地帶.最終生成高山、湖水.
地形演示程式:下載
繪畫地形思路如下:
- 設地形的最大高度為10
- 湖水平面設為1
- 因為像素8Bit最大256色, 所以縮放因子等於256除以地形的最大高度scale=256/10
- 地形由三角形所組成, 遍曆所有像素生成三角形.
- 地形的顏色由綠色分量組成,Y座標越高顏色越明亮.
- 通過像素的索引生成三角形XZ座標
- 通過像素的顏色值生成三角形Y座標,Y=像素顏色/縮放因子
- 繪畫藍色湖水平面覆蓋低窪地帶
成生地形RAW文檔
- 打開Photoshop並載入高空拍攝圖
- 大小轉換為64*64像素
- 圖像/模式/灰度
- 圖像/模式/8位通道
- 儲存為.RAW文檔
繪畫地形的函式示例
void Draw_Terrain (PBYTE data,int height,int width)
{
for(int z=0;z < height-1; ++z)
{
glBegin(GL_TRIANGLE_STRIP);// 繪畫三角形
for(int x=0;x < width; ++x)
{
float scaled_height1 = data[ z * width + x] / (256.0f / 10.0f);
float scaled_height2 = data[(z+1)* width + x] / (256.0f / 10.0f);
glColor3f(0.1f, 0.5f + 0.5f * scaled_height1 / 10, 0.1f);// 山地的顏色,地勢越高綠色分量越大
glVertex3f((x – width/2.0f), scaled_height1,(z – height/2.0f));
glColor3f(0.1f, 0.5f + 0.5f * scaled_height2 / 10, 0.1f);// 山地的顏色,地勢越高綠色分量越大
glVertex3f((x – width/2.0f), scaled_height2, ((z+1) – height/2.0f));
}
glEnd();
}
// 繪畫湖面
glColor3f(0.0, 0.0, 0.8f);// 藍色湖水
glBegin(GL_QUADS);
glVertex3f(-width/2.1f, 1, height/2.1f);
glVertex3f( width/2.1f, 1, height/2.1f);
glVertex3f( width/2.1f, 1, -height/2.1f);
glVertex3f(-width/2.1f, 1, -height/2.1f);
glEnd();
}