OpenGL 模板檢測使用

2021-10-09 07:36:43 字數 1229 閱讀 6248

模板緩衝

模板緩衝先清空模板緩衝設定所有片段的模板值為0,然後開啟矩形片段用1填充。場景中的模板值為1的那些片段才會被渲染(其他的都被丟棄)。

void glstencilfunc(glenum func, glint ref, gluint mask)函式有三個引數:

func:設定模板測試操作。這個測試操作應用到已經儲存的模板值和glstencilfunc的ref值上,可用的選項是:gl_never、gl_lequal、gl_greater、gl_gequal、gl_equal、gl_notequal、gl_always。它們的語義和深度緩衝的相似。

ref:指定模板測試的引用值。模板緩衝的內容會與這個值對比。

mask:指定乙個遮罩,在模板測試對比引用值和儲存的模板值前,對它們進行按位與(and)操作,初始設定為1。

void glstencilop(glenum sfail, glenum dpfail, glenum ***ass)函式包含三個選項,我們可以指定每個選項的動作:

sfail: 如果模板測試失敗將採取的動作。

dpfail: 如果模板測試通過,但是深度測試失敗時採取的動作。

***ass: 如果深度測試和模板測試都通過,將採取的動作。

每個選項都可以使用下列任何乙個動作。

操作描述

gl_keep

保持現有的模板值

gl_zero

將模板值置為0

gl_replace

將模板值設定為用glstencilfunc函式設定的ref值

gl_incr

如果模板值不是最大值就將模板值+1

gl_incr_wrap

與gl_incr一樣將模板值+1,如果模板值已經是最大值則設為0

gl_decr

如果模板值不是最小值就將模板值-1

gl_decr_wrap

與gl_decr一樣將模板值-1,如果模板值已經是最小值則設為最大值

gl_invert

bitwise inverts the current stencil buffer value.

在繪製物體前,把模板方程設定為gl_always,用1更新物體將被渲染的片段。

渲染物體,寫入模板緩衝。

關閉模板寫入和深度測試。

每個物體放大一點點。

使用乙個不同的片段著色器用來輸出乙個純顏色。

再次繪製物體,但只是當它們的片段的模板值不為1時才進行。

開啟模板寫入和深度測試。

OpenGL 模板測試

1,模板實現裁剪例項 include gltools.h include else define freeglut static include endif define yellowmat 1 define bluemat 2 void init void glfloat yellow specu...

OpenGL(十四) 模板測試

啟用模板測試時,opengl會在記憶體中開闢一塊空間作為模板緩衝區,裡邊儲存了每個畫素的 模板值 模板測試的過程就是把每乙個畫素的模板值與乙個設定的模板參考值進行比較,符合設定條件的通過測試,不符合條件的則不會繪製。glclearstencil函式用來指定模板值復位後的初始值,跟使用glclearc...

opengl模板緩衝區

相信大家有些人對opengl的模板緩衝區不是很理解,包括我最開始也是,opengl的模板緩衝區其實就是採用過濾的技術來控制那些顏色可以繪製,那些不能進行繪製。這裡的過濾技術也就是我們的乙個控制方法,主要體現在如下兩個函式glstencilfunc glenum func,glint ref,glui...