遊戲製作詳解自----OpenGL入門教程(五)(轉)

post0發表於2007-08-12
遊戲製作詳解自----OpenGL入門教程(五)(轉)[@more@]

  如果用過3DS/LIGHTWAVE等任何一種三維圖形軟體包,就可以發現製作一個三維場景無非以下幾項工作:

  建模:製作各種物體。

  放置:將做好的各物體透過平移、旋轉等放到場景空間的適當位置。

  上色:給物體模型指定顏色或表面紋理。

  打燈:在場景中適當位置放置幾盞燈以照亮場景。

  攝像:在空間適當位置放上適當角度的攝像機,以得到所需的視覺效果。

  用OpenGL開發應用程式與之類似,通常是:

  

  設定視見體

  定義光源

  生成場景

  而三維圖形生成的流程如下:

  

  放置幾何變換:平移、旋轉、縮放等

  視見變換:裁剪、消隱、投影等

  視見體設定:

  

  視見體有兩種:正投影體和透視投影體,正投影視見體中的物體在螢幕上的投影不會出現近大遠小的現象,而透視投影視體則與人眼的觀察結果類似,離觀察點越遠的物體在螢幕上的投影越小,因此透視投影體中的觀察結果看起來更真實一些。

  

  定義透視投影體的方法是:

  glFrustum(left,right,bottom,top,near,far);

  //物體在這六個引數界定的範圍內可見,超出邊界將被裁掉。

  //left,bottom,代表左下 right,top代表右上

  

  

  定義透視投影體的方法是:

  glOrtho(left,right,bottom,top,near,far);

  //物體在這六個引數界定的範圍內可見,超出邊界將被裁掉。

  

  綜上所述,一個三維圖形應用程式在建好OpenGL Pipleline之後就要向管道發如下一系列的命令,以建立一個三維觀察環境:

  

  //1、設定視見體,在窗體的Resize事件時

  

  void __fastcall TForm1::FormResize(TObject *Sender)

  {

  glViewport(0, 0, Width, Height);

  //使用Form窗體的指定區域為顯示區

  //如改為Width/4,Height/4,Width/2,Width/2,

  //則只用Form1的-窗體的中間1/4進行顯示

  glMatrixMode(GL_PROJECTION); //切換到投影矩陣棧

  glLoadIdentity(); //清除投影矩陣

  glFrustum(1.0,-1.0,-1.0,1.0,1.0,-1.0);

  //指定透視視見體範圍

  //超出部分將被裁去

  //或正投影glOrtho(1.0,-1.0,-1.0,1.0,1.0,-1.0);

  glMatrixMode(GL_MODELVIEW); //切換到模型視見矩陣棧

  glLoadIdentity(); //清除視見矩陣

  }

  

  說明:視見環境的設定還有許多其它的細節,以後會逐步介紹

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951749/,如需轉載,請註明出處,否則將追究法律責任。

相關文章