讓我們假設你有一個方格紋理的黑色和白色方塊。首先,您需要設置模板測試以繪製蒙版:
glEnable(GL_STENCIL_TEST);
glDisable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glStencilFunc(GL_ALWAYS, 1, -1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
接下來繪製方格紋理。這裏的關鍵步驟(放棄進來的地方)是,你設置你的片段着色器只繪製棋盤是黑色的片段(或者如果你願意,可以將其翻轉爲白色)。丟棄關鍵字會跳過渲染與您的條件不匹配的任何像素。
//in the fragment shader
if(sampleColor.r > 0.5) { discard; }
此渲染步驟後,必須用棋盤圖像,其中所述緩衝器的一半具有爲0的模板值,而另一半模板緩衝區具有1
模版值。然後,通常使與模板測試啓用通過當模板緩存是== 1
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc(GL_EQUAL, 1, -1);
來源
2012-07-06 20:09:29
Tim
確定,但如果我想我的質地是一個矩形,在屏幕前沒有它受着做不同的變換模型視圖矩陣(旋轉翻譯)。我是否需要第二個視口始終保持最佳狀態,然後根據該視口影響模版,以便同時影響這兩個視口?如果這是有道理的... – PPR 2012-07-06 20:39:27
我不認爲你需要對視口做任何事情。如果你不想讓你的紋理受到當前MVP矩陣的影響,那麼就不要將它乘以頂點着色器中的矩陣。 @PPR – Tim 2012-07-06 20:51:55