片段著色器處理完乙個片段後,模板測試會執行,和深度測試一樣,可能會丟棄片段。
被保留的片段進入深度測試,會丟棄更多的片段,模板測試是根據又乙個緩衝來進行的,叫做模板緩衝。
乙個模板緩衝中,每個模板值是8位的,可以將這些模板值設定為我們想要的值,然後當某乙個片段有某乙個模板值的時候,我們就可以選擇丟棄或是保留這個片段了。
每個視窗庫都需要為你配置乙個模板緩衝。glfw自動做了這件事,所以我們不需要告訴glfw來建立乙個,但其它的視窗庫可能不會預設給你建立乙個模板庫,所以記得要檢視庫的文件。
模板緩衝首先會被清除為0,之後在模板緩衝中使用1填充了乙個空心矩形。場景中的片段將會只在片段的模板值為1的時候會被渲染(其它的都被丟棄了)。
模板緩衝操作允許我們在渲染片段時候將模板緩衝設定為乙個特定的值。通過渲染時候修改模板緩衝的內容,寫入了模板緩衝。
在繪製(需要新增輪廓的)物體之前,將模板函式設定為gl_always,每當物體的片段被渲染時,將模板緩衝更新為1。
渲染物體。
禁用模板寫入以及深度測試。
將每個物體縮放一點點。
使用乙個不同的片段著色器,輸出乙個單獨的(邊框)顏色。
再次繪製物體,但只在它們片段的模板值不等於1時才繪製。
再次啟用模板寫入和深度測試。
除了物體輪廓之外,模板測試還有很多用途,比如在乙個後視鏡中繪製紋理,讓它能夠繪製到鏡子形狀中,或者使用乙個叫做陰影體積(shadow volume)的模板緩衝技術渲染實時陰影。模板緩衝為我們已經很豐富的opengl工具箱又提供了乙個很好的工具。
OpenGL 高階資料
glbuffersubdata gl array buffer,24,sizeof data data 範圍 24,24 sizeof data 通過offset和size填充一段資料緩衝,而不是全部 glmapbuffer繫結乙個指標到資料緩衝,然後直接對資料操作。glunmapbuffer解綁指...
OpenGL紋理高階
矩形紋理 對於二維紋理來說,除了gl texture 2d之外,使用gl texture rectangle就可以使用矩形紋理。矩形紋理幾大特點 不能mip,只能載入glteximage2d的level 0 紋理座標非標準化 不支援壓縮紋理 這種方式通常用於處理和提交影象資料的應用,比起通常的2d紋...
OpenGL高階光照 1
一 簡介 現實世界的光照是極其複雜的,而且會受到諸多因素的影響,這是我們有限的計算能力所無法模擬的。因此opengl的光照使用的是簡化的模型,對現實的情況進行近似,這樣處理起來會更容易一些,而且看起來也差不多一樣。這些光照模型都是基於我們對光的物理特性的理解。其中乙個模型被稱為馮氏光照模型 phon...