OpenGL 「teapot」 光照模型

2021-09-24 16:40:01 字數 2593 閱讀 4174

功能要求:

顯示預設的 teapot 模型

為 teapot 模型建立 smooth shading 效果,如圖 1 所示。

利用 opengl 的 api 初始化 material property, light source, lighting model, depth buffer 等資訊。

python opengl實現

# 匯入相關庫

from opengl.gl import

*from opengl.glut import

*# 初始化opengl函式

definit()

:# 材質反光性設定

mat_specular =

[1.0

,1.0

,1.0

,1.0

]# 鏡面反射引數

mat_shininess =

[50.0

]# 高光指數

light_position =

[1.0

,1.0

,1.0

,0.0

]# 光源位置

white_light =

[1.0

,1.0

,1.0

,1.0

]# 燈位置(1,1,1), 最後1-開關

light_model_ambient =

[0.2

,0.2

,0.2

,1.0

]# 環境光引數

glclearcolor(

0.0,

0.0,

0.0,

0.0)

# 背景色

glshademodel(gl_smooth)

# 填充模式

# 材質屬性 material property

glmaterialfv(gl_front, gl_specular, mat_specular)

glmaterialfv(gl_front, gl_shininess, mat_shininess)

# 燈光設定

gllightfv(gl_light0, gl_position, light_position)

gllightfv(gl_light0, gl_diffuse, white_light)

# 散射光屬性

gllightfv(gl_light0, gl_specular, white_light)

# 鏡面反射光

gllightmodelfv(gl_light_model_ambient, light_model_ambient)

glenable(gl_lighting)

# 開關:使用光

glenable(gl_light0)

# 開啟0#燈

glenable(gl_depth_test)

# 開啟深度測試

defdisplay()

: glclear(gl_color_buffer_bit | gl_depth_buffer_bit)

glutsolidteapot(

0.5)

# 茶壺繪製

glflush(

)def

reshape

(w, h)

: glviewport(0,

0, w, h)

# 設定投影引數

glmatrixmode(gl_projection)

glloadidentity(

)# 正交投影

if w <= h:

glortho(

-1.5

,1.5,-

1.5*h / w,

1.5*h / w,

-10.0

,10.0

)else

: glortho(

-1.5

*w / h,

1.5*w / h,

-1.5

,1.5,-

10.0

,10.0

)# 設定模型引數--幾何體引數

glmatrixmode(gl_modelview)

glloadidentity(

)if __name__ ==

"__main__"

: glutinit(

) glutinitdisplaymode(glut_single | glut_rgb | glut_depth)

glutinitwindowsize(

400,

400)

glutinitwindowposition(

100,

100)

glutcreatewindow(

"teapot-shading"

) init(

) glutdisplayfunc(display)

glutreshapefunc(reshape)

glutmainloop(

)

執行結果

Unity Shader中實現漫反射光照模型

逐頂點漫反射光照模型。頂點著色器的最基本任務就是把頂點位置從模型位置轉換到裁剪空間中。pos mul unity matrix mvp,pos2 pos為float4型別,pos2為float4型別。其中pos2要獲得模型空間座標 可在定義時 float4 pos2 position 計算漫反射光照...

簡單光照模型(Lambert 光照模型)

環境光是對光照現像的最簡單抽象,因而侷限性很大。它僅能描述光線在空間中無方向並均勻散布時的狀態。很多情況下,入射光是帶有方向的,比如典型的陽光。如果光照射到比較粗糙的物體表面,如粉筆,由於這些表面從各個方向等強度地反射光,因而從各個視角出發,物體表面呈現相同的亮度,所看到的物體表面某點的明暗程度不隨...

光照與渲染(二) 光照技術

廣義的來說,unity的全域性光照是 實時 或是 預先計算好 的,在某些情況下兩種方法可以結合使用,照出更逼真的場景。本節我們會針對兩種技術的差異優勢和使用時機做個簡單的描述。實時照明 realtime lighting 預設情況下,unity的燈源 直接光源,投射燈,點光源 都是實時的,代表這些燈...