非零環(huán)繞數(shù)&奇偶原則&多邊形鏤空渲染

GPU 如何判斷多邊形內(nèi)部頂點是否進行渲染

1. 判斷多邊形是否為自相交圖形

  • 如果多邊形內(nèi)部的頂點沒有重合的頂點, 基本上就代表了此多邊形為不自相交多邊形, 因此, 也就不存在多邊形內(nèi)部頂點的顏色是否渲染的問題, 如果多邊形內(nèi)部的頂點存在相交或重合頂點, 則代表內(nèi)部存在頂點需要使用其他規(guī)則進行渲染判斷.

  • 自相交多邊形因為有相交部分, 這部分中的頂點可能不是圖形內(nèi)部的點, 頂點不是圖形內(nèi)部的點就不需要渲染, 所以就需要判斷頂點是在多邊形內(nèi)部還是外部, 判斷的規(guī)則有兩種.

  • 判斷多邊形是否為自相交圖形需要使用具體的算法進行判斷, 上面的結(jié)論為一般結(jié)論, 所以, 實際使用時需要視情況而定.

2. 自相交的多邊形如何確定頂點渲染顏色, 采用 非零環(huán)繞數(shù)規(guī)則 或者 奇偶規(guī)則

  • 注意: 此處的多邊形路徑一定是同一條路徑形成的多邊形, 例如 Path 對象中可以不斷的增加路徑都會被視為多邊形內(nèi)部邊, 如果繪制兩個 path 則其內(nèi)部會獨立計算.
非零環(huán)繞數(shù) ___> 非零頂點為外點
  • 此規(guī)則采用的是計算經(jīng)過的 path 以及對應方向的方式確定點的內(nèi)部外部, 最后決定是否對部分頂點進行渲染.

  • 具體計算方式

    1. 將多邊形的最外層頂點看做是一條路徑( 事實上本身也應該是一條路徑 ), 同時規(guī)定好多邊形外層頂點的運行方向
    2. 從需要計算的頂點處引出一條任意方向射線, 此時環(huán)繞數(shù)初始化為 0 , 然后計算此射線經(jīng)過的外層頂點形成的路徑, 如果經(jīng)過順時針方向路徑, 則 -1 , 否則 +1 , 射線超出多邊形范圍后, 此時得到的非零環(huán)繞數(shù), 如果為 0 則代表頂點為多邊形外部頂點因此不需要渲染, 如果環(huán)繞數(shù)非零, 則頂點為內(nèi)部頂點, 需要進行渲染.
  • 注意: 因為非零環(huán)繞數(shù)的計算方式需要使用路徑的方向, 所以, 在繪圖的時候一般都會自然的包含有方向元素, 例如繪制 Arc 時需要確定起始角度以及結(jié)束角度等.

奇偶規(guī)則 ___> 偶數(shù)頂點為外點
  • 此規(guī)則采用的是計算射線經(jīng)過的邊的數(shù)量的奇偶性質(zhì)來決定頂點的內(nèi)外分配.

  • 具體計算方式

    1. 同樣需要將多邊形的最外層頂點看做是一條路徑, 但是不需要規(guī)定路徑的方向.
    2. 從待計算頂點向外導出射線, 如果射線經(jīng)過的外邊數(shù)量為偶數(shù)則代表此頂點為外部頂點, 不需要渲染, 如果是奇數(shù), 就是內(nèi)部頂點, 需要進行渲染.

具體語言中的實際應用

iOS 的渲染處理

1.CGContextClip 使用非零環(huán)繞數(shù)規(guī)則來判斷當前路徑和裁剪路徑的交集局荚。

2.CGContextEOClip 使用奇偶環(huán)繞數(shù)規(guī)則來判斷當前路徑和裁剪路徑的交集。

實際應用: 如何繪制出一個中間鏤空的圖形, 或者說如何在整片圖形中形成一個鏤空的不渲染空洞

  • 因為以上規(guī)則都是基于繪制圖形的路徑而存在, 因此, 默認使用路徑進行圖形的繪制

  • 如果需要在一個正方形中保證一個圓形的空洞不渲染, 那么首先需要繪制一條路徑為正方形, 此時調(diào)用 fill 函數(shù)則會對方形中所有的頂點進行顏色繪制, 因此, 給此路徑( 多邊形 )在增加一條外邊, 從中心點開始繪制一個圓形, 此時, 方形范圍內(nèi)的所有頂點被分為兩個部分, 圓形外以及圓形內(nèi), 圓形外的頂點因為非零環(huán)繞數(shù)或者奇偶原則處理后都是多邊形內(nèi)部頂點, 因此, 都會被渲染, 但是圓形內(nèi)部的頂點因為經(jīng)過非零環(huán)繞數(shù)或者奇偶原則處理過后屬于外部頂點, 因此, 不會被渲染, 最終就形成了方形中有一個空洞的狀態(tài).

  • 同理, 如果需要繪制中空的餅狀圖, 其實就是先繪制一個較大的圓形, 之后再繪制一個較小的圓形, 兩個圓形的邊同屬一個 path 就能保證按規(guī)則計算后出現(xiàn)鏤空效果.

* iOS 中繪制一個鏤空蒙層 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
    [path appendPath:[UIBezierPath bezierPathWithArcCenter:self.firstPoint radius:self.radiu/2 startAngle:0 endAngle:2*M_PI clockwise:NO]];
    self.maskLayer = [[CAShapeLayer alloc]init];
    self.maskLayer.path = path.CGPath;
    self.layer.mask = self.maskLayer;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末火本,一起剝皮案震驚了整個濱河市危队,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钙畔,老刑警劉巖茫陆,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擎析,居然都是意外死亡簿盅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門揍魂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桨醋,“玉大人,你說我怎么就攤上這事现斋∠沧睿” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵庄蹋,是天一觀的道長瞬内。 經(jīng)常有香客問我迷雪,道長,這世上最難降的妖魔是什么虫蝶? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任章咧,我火速辦了婚禮,結(jié)果婚禮上能真,老公的妹妹穿的比我還像新娘赁严。我一直安慰自己,他們只是感情好粉铐,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布疼约。 她就那樣靜靜地躺著,像睡著了一般蝙泼。 火紅的嫁衣襯著肌膚如雪忆谓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天踱承,我揣著相機與錄音,去河邊找鬼哨免。 笑死茎活,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的琢唾。 我是一名探鬼主播载荔,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼采桃!你這毒婦竟也來了懒熙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤普办,失蹤者是張志新(化名)和其女友劉穎工扎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衔蹲,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡肢娘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舆驶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱健。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沙廉,靈堂內(nèi)的尸體忽然破棺而出拘荡,到底是詐尸還是另有隱情,我是刑警寧澤撬陵,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布珊皿,位于F島的核電站网缝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亮隙。R本人自食惡果不足惜途凫,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溢吻。 院中可真熱鬧维费,春花似錦、人聲如沸促王。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝇狼。三九已至阅畴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迅耘,已是汗流浹背贱枣。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颤专,地道東北人纽哥。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像栖秕,于是被迫代替她去往敵國和親春塌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容