2010年2月18日 星期四

Jitter Tutorial 35 Lighting and Fog 摘要

  • OpenGL 的燈光模式有下列幾種:(1) specular light: 由單一方向而來的光,閃耀的物體或鏡面反射出的光束以 specular light 類為主。(2) diffuse light: 由單一向向而來的光,但卻由一表面平均的反射至各方位。若該表面直接面對光源,則反射出的光最為明亮,反之,則反射光較暗。(3) ambient light: 無方向性的光,各方向皆等亮,主要因為光源在到眼睛之前已經經過多重的反射。(4) emissive light: 只有在眼睛正視光源時,才看得到的光,主要用於3D 物件本身即是發光體時。(p.307-308)
  • Jitter 中的燈光預設值是關閉的,smooth shading 也是預設為關閉狀態,因此需下 lighting_enable 1, smooth_shading 1 的指令至 jit.gl.gridshape 才可看到光的作用。預設值的 auto_material 是開啟的,此狀態下,diffiuse light 及 ambient light 的作用會反應在物體上,但 specular light 與 emissive light 則否。欲看到 specular light 與 emissive light 的作用,需先關閉 auto_mateiral 屬性。當我們希望所有的燈光成分皆明顯地按照既有規定呈現,則必需先將 auto_material 屬性關閉。(p.309)
  • jit.gl.handle 連接 jit.gl.gridshape 可以使所製造的3D物件,利用 control + 滑鼠拖曳,可改變3D 物體在 x y 平面的位置;若利用 alt + 滑鼠拖曳,則可改變其在 z 軸的位置。(註解:當 jit.gl.handle 連接至 jit.gl.gridshape 時,若滑鼠移動 jit.gl.gridshape 所產生的 3D 物件時,jit.gl.handle 會釋出 position $1 $2 $3 或 rotation $1 $2 $3 參數,若將此參數以 route、 unpack 解開之後,加上 light type 的參數作為第四個變數,亦即以 light_position $1 $2 $3 $4 的指令格式連接至 jit.gl.render 則可以讓滑鼠的動作影響畫面上的白色小圓點作為代表的光源的位置。範例中的 jit.gl.handle 未連接至帶有 shape 屬性的 jit.gl.gridshape,故滑鼠控制僅是光源的位置,而非所繪的3D物件。)
  • openGL 物件的 shineness 屬性是用來明訂光從物體表面反射出去時的發散程度之多寡。例如要模擬鏡面,則必須使用較高的 shineness 參數。參數值調整於 2 至 50 之間較能反應真實物體的反光效果。(p.313)
  • jit.gl.render 的 light_global_ambient 屬性用來控制整體的 ambient light,該數值會與整個場景的所有的 ambient light 組成份子相乘,加到每個物體的 vetex 上。
  • 在3D場景中的可移動的光,可分為 diretional(方向性)或 positional (位置性),由  light_position $1 $2 $3 $4 的第四個參數來設定,$4 等於 0 時,光是有方向性的,意指由第一、二、三參數用來明訂一個向量,作為光的來源。$4 等於非零的數時,光是 positional 的,亦即依照物體在場景中的特定位置而決定照明的方式。(p.315)
  • OpenGl 的 fog 運作,會在完成光的計算後,混和 fog 的顏色與每個 vertex 的顏色,其數值隨著物體與攝影機之間的距離增加而增加,遠方的物體會消失在 fog 中。其設定可使用 fog_params 屬性設定,由左而右為 R G B A Density, start distance, end distance,連接至產生3D物體的繪圖物件 (如 jit.gl.gridshape)。(p.316)

沒有留言:

張貼留言