OpenGL基礎之Stencil Testing - 台部落
文章推薦指數: 80 %
stencil testing發生在fragment shader之後,depth testing之前,它利用stencil-buffer來捨棄一些片元,餘下的會進入depth testing進行進一步的比較。
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
未分類
正文
OpenGL基礎之StencilTesting
原創
山維世界
2018-09-0523:26
stenciltesting發生在fragmentshader之後,depthtesting之前,它利用stencil-buffer來捨棄一些片元,餘下的會進入depthtesting進行進一步的比較。
stencilbuffer中每一個片元通常對應一個8bit的stencilvalue,也就是每一個像素或者片元可以設置256個不同的值,我們可以根據這些值來決定哪些片元可以保留,哪些可以捨棄。
我們可以在片元渲染的過程中,指定stencil-buffer中的值;在同一個渲染循環中,就可以讀stencilbuffer中的值,來保留或者捨棄一些片段,通常的流程如下:
1、開啓寫stencil-buffer
2、渲染物體,更新stencil-buffer
3、關閉寫stencil-buffer
4、渲染物體,並根據stencil-testing結果捨棄一些片元
同樣,可以通過glEnable(GL_STENCIL_TEST)來開啓深度模板測試,並且需要每一幀都清空stencil-buffer:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
同時可以通過函數glStencilMask(0xff),來制定一個值與寫入的值進行‘與’操作,如果設置爲0x00,則寫入的值永遠爲0;
Stencilfunctions
跟depthtesting一樣,我們可以指定stenciltesting的比較函數,以此來決定片元的通過方式,用法是:
glStencilFunc(GLenumfunc,GLintref,GLuintmask);
func:stenciltestfunction,包括了GL_NEVER,GL_LESS,GL_LEQUAL,GL_GREATER,GL_GEQUSAL,GL_NOTEQUAL,GL_ALWAYS
ref:指定一個引用值,與stencil-buffer的內容進行比較
mask:指定mask值,在stenciltest之前,先與stencil-buffer中的值和ref值進行‘與’操作
可以使用函數glStencilOp(GLenumsfail,GLenumdpfail,GLenumdppass)指定一些操作:
1、sfail:如果stenciltest失敗採取的操作;
2、dpfail:如果stenciltest通過,但是depthtest失敗進行的操作;
3、dppass:如果stenciltest和depthtest都通過採取的操作;
這些操作的定義如下表:
Action
Description
GL_KEEP
stencil-value值保持不變
GL_ZERO
stencil-value設置爲0
GL_REPLACE
stencil-value替換爲ref
GL_INCR
stencil-value加1(不能大於最大值)
GL_INCR_WRAP
stencil-value加1(大於最大值後循環回0)
GL_DECR
stencil-value減1(不能小於最小值)
GL_DECR_WRAP
stencil-value減1(小於最小值循環到最大值)
GL_INVERT
按位取反
發表評論
登录
所有評論
還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布.
相關文章
Qt編寫物聯網管理平臺30-用戶登錄退出
一、前言
一個用戶登錄界面,是一個完整的應用系統,尤其是客戶端系統必備的一個功能模塊,傳統的登錄處理一般都是和本地的用戶信息進行比對,而現代的登錄系統一般是發送請求到服務器進行驗證,無論何種方式,都是需要去用戶信息表找到對應的用戶信息,取出
飛揚青雲
2022-05-2314:40:44
SQLite3使用筆記(2)——插入
目錄1.論述2.總結
1.論述
如同上一篇文章SQLite3使用筆記(1)——查詢所述,使用SQLite進行查詢操作同樣有兩種方式。
對於比較簡單的表格插入,使用sqlite3_exec()接口就可以了:
stringstrSql
harlee44
2022-05-2314:40:04
SQLite3使用筆記(1)——查詢
目錄1.概述2.詳論2.1.打開/關閉數據庫2.2.數據查詢3.參考
1.概述
SQLite是一個嵌入式SQL數據庫引擎。
與大多數其他SQL數據庫不同,SQLite沒有單獨的服務器進程。
SQLite直接讀寫普通磁盤文件。
harlee44
2022-05-2314:40:04
遊戲大廳從基礎開始(3)——最吸引眼球的部分客戶端與服務器的連接
遊戲大廳從基礎開始(3)
——最吸引眼球的部分客戶端與服務器的連接
看了上篇隨筆的回覆發現大家都很關心如何實現連接。
但是本節可能不會涉及到數據連接的具體實現。
(補充:tcp實現封裝已經完成 請參考 http
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
遊戲大廳從基礎開始(4)-通過L2X用配置文件反射組裝程序(VBonly)
遊戲大廳從基礎開始(4)-通過L2X用配置文件反射組裝程序(VBonly)
很久沒更新了。
前一陣工作比較充實(就是比較勞累拉~),加上向老趙學習努力瘦身,精神愈發痛苦,難免就懶惰下來。
通用倒了,項目突然死亡,Onbench了一個月,越
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
遊戲大廳從基礎開始(5)--繞回來細說聊天室(上)
距離上次寫大廳已經有幾個月。
中間工作繁忙,待學習的東西又很多,又有很多新產品的想法想實踐,一直把這個坑閒置着。
直到前兩天簡單的樹遍歷枚舉器-挑戰一個程序員到底能多懶裝配腦袋的幾個回帖給我帶來一些靈感,讓我又重新看看我聊天頻道的實現,
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
遊戲大廳從基礎開始(3.5)——最吸引眼球的部分客戶端與服務器的連接的實現
遊戲大廳從基礎開始(3.5)
——最吸引眼球的部分客戶端與服務器的連接的實現
可能要犯大忌諱 本次只有代碼 所以補充兩句
正在實現策略模式的constructor 所以最近沒有時間整理註釋
大家湊合看 隨
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
關於silverlightdepencyobject簡單的clone
最近玩silverlight 3 需要把一個 plateprojectionclone
作爲sealed class 不大好clone 於是想了個別的辦法
Codeusing System;using System
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
遊戲大廳從基礎開始(6)--繞回來細說聊天室(中)之女僕編年史1
上一篇我們大致的瞭解了幾種聊天室的行爲模式
最簡單明瞭的推模式幾乎不需要任何多餘的語言來描述它的實現
這一篇我們看看如何實現拉模式更有效。
本圖清晰的表現了"拉"模式聊天室的行爲。
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
簡單的樹遍歷枚舉器v0.2-挑戰一個程序員到底能多懶-添加廣度優先遍歷
前一陣在遞歸算法相關回貼的討論中和某lz抱怨現在的同志們連用自己的棧加循環模擬遞歸都不會做了。
如果自己實現遞歸棧 又怎麼會在線程棧中儲存過多無關信息?數據全部都在堆裏又怎會stackoverflow?當時就有想法自己實現一個,造福一
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
X360吉他英雄4鼓套裝&1TB硬盤入手
期待晚上的表現 撲通撲通的心跳阿 畝哈哈哈哈
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
一時技癢不用模擬第一印象的構造通過三個觀察得來的規律解決N^2個往返接力問題
問題原題 見銀河使者的隨筆 http://www.cnblogs.com/nokiaguy/archive/2009/07/24/1530139.html第一印象 我得到了和他一樣的解法,就是用斜切片,每一層的x-1和y+1 來控
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
silverlight2客戶端的僞DataTableforEF
公司需要我做SilverLightrearch
發現silverlight數據綁定多少有點痛苦 objectdatasource 要等到 vs2010
於是自己寫了一個
用得到的自然會看懂
MSFT:waywa韋恩卑鄙
2022-05-2314:39:53
【Vue】如何寫一個表格列顯隱控制的組件?
需求
公司項目需要實現對錶格列的顯示隱藏進行配置,額外配置可自行添加,這裏只是說簡單的顯隱控制,複雜的只是在頁面裏面多寫而已,核心代碼是一樣的。
簡單的:
比較複雜的:
代碼實現
表格頁面.vue
延伸文章資訊
- 1走进Stencil Buffer 系列0 : 模板缓冲和模板测试是什么?
模板测试(Stencil Test)是现代渲染流水线的一环,其中涉及到的就是模板缓冲(Stencil Buffer),模板缓冲可以用来制作物体的遮罩、轮廓描边、阴影、 ...
- 2模板测试
当片段着色器处理完片段之后,模板测试(Stencil Test) 就开始执行了,和深度测试 ... 模板测试基于另一个缓冲,这个缓冲叫做模板缓冲(Stencil Buffer),我们被允许在 ...
- 3Stencil buffer - Wikipedia
A stencil buffer is an extra data buffer, in addition to the color buffer and Z-buffer, found on ...
- 4Unit Testing - Stencil.js
Stencil makes it easy to unit test components and app utility functions using Jest. Unit tests va...
- 5OpenGL基礎之Stencil Testing - 台部落
stencil testing發生在fragment shader之後,depth testing之前,它利用stencil-buffer來捨棄一些片元,餘下的會進入depth testing進...