OpenGL之載入地形文檔

OpenGL之載入地形文檔

地形文檔就是256色位圖文檔,因為位圖即點陣圖.點的數值越大地形越高,數值越低形成低窪地帶.最終生成高山、湖水.

地形演示程式:下載

  1. 按+/-鍵移動煙霧距離
  2. 按{}鍵升高或降低湖水高度
  3. OPEN/FILE載入地形文檔,支持拖放.
  4. 只支持RAW格式
  5. 按ESC鍵重置聚地形文檔
  6. 壓縮包內的terrain目錄附有三個地形文檔

繪畫地形思路如下:

  1. 設地形的最大高度為10
  2. 湖水平面設為1
  3. 因為像素8Bit最大256色, 所以縮放因子等於256除以地形的最大高度scale=256/10
  4. 地形由三角形所組成, 遍曆所有像素生成三角形.
  5. 地形的顏色由綠色分量組成,Y座標越高顏色越明亮.
  6. 通過像素的索引生成三角形XZ座標
  7. 通過像素的顏色值生成三角形Y座標,Y=像素顏色/縮放因子
  8. 繪畫藍色湖水平面覆蓋低窪地帶

成生地形RAW文檔

  1. 打開Photoshop並載入高空拍攝圖
  2. 大小轉換為64*64像素
  3. 圖像/模式/灰度
  4. 圖像/模式/8位通道
  5. 儲存為.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();

}

評論