国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

這篇具有很好參考價(jià)值的文章主要介紹了OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言
本篇在講什么

OpenGL藍(lán)寶書第八章學(xué)習(xí)筆記之曲面細(xì)分
本篇適合什么

適合初學(xué)OpenGL的小白
本篇需要什么

對(duì)C++語法有簡(jiǎn)單認(rèn)知
對(duì)OpenGL有簡(jiǎn)單認(rèn)知
最好是有OpenGL超級(jí)寶典藍(lán)寶書
依賴Visual Studio編輯器

本篇的特色

具有全流程的圖文教學(xué)
重實(shí)踐,輕理論,快速上手
提供全流程的源碼內(nèi)容

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分
★提高閱讀體驗(yàn)★

?? ? 一級(jí)標(biāo)題 ??

?? ? 二級(jí)標(biāo)題 ??

?? ? 三級(jí)標(biāo)題 ??

?? ? 四級(jí)標(biāo)題 ??


? 曲面細(xì)分

在第三章管線的學(xué)習(xí)當(dāng)中我們已經(jīng)對(duì)細(xì)分曲面階段有了一定的了解,這一章節(jié)我們?cè)趯?duì)其進(jìn)行一遍系統(tǒng)一點(diǎn)的學(xué)習(xí)

細(xì)分曲面位于頂點(diǎn)著色器和幾何著色器之間,分為了三個(gè)階段分別是曲面細(xì)分控制著色器(TCS)、固定功能型曲面細(xì)分引擎以及曲面細(xì)分評(píng)估著色器(TES)

曲面細(xì)分控制著色器負(fù)責(zé)生成3項(xiàng)數(shù)據(jù)

  • 生成單個(gè)面片的內(nèi)外曲面細(xì)分因子
  • 生成單個(gè)輸出控制點(diǎn)的位置和其他屬性
  • 生成單個(gè)面片的用戶定義的變量

曲面細(xì)分引擎將確定大基元如何拆分成小基元

曲面細(xì)分評(píng)估著色器接受上二者傳遞的數(shù)據(jù)、處理后輸出至基元裝配

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 曲面細(xì)分基元模式

曲面細(xì)分模式用于確定怎么拆分基元的,拆分的方式有三種分別是四邊形、三角形或等值線,下面我們挨個(gè)看個(gè)例子

注:以下所有示例均摘自O(shè)penGL超級(jí)寶典配套資源代碼tessmodes,可自行查看

注:以下示例均設(shè)置默認(rèn)頂點(diǎn)和片元著色器,文中不在累述

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分
OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 使用四邊形拆分基元

下方是一個(gè)簡(jiǎn)單的使用四邊形拆分基元的曲面細(xì)分控制著色器和曲面細(xì)分評(píng)估著色器的例子

  • 曲面細(xì)分控制著色器
# version 420 core

layout (vertices = 4) out;

void main(void)                                                               
{                                                                             
    if(gl_InvocationID == 0)                                                  
    {                                                                         
        gl_TessLevelInner[0] = 9.0;                                           
        gl_TessLevelInner[1] = 7.0;                                           
        gl_TessLevelOuter[0] = 3.0;                                           
        gl_TessLevelOuter[1] = 5.0;                                           
        gl_TessLevelOuter[2] = 3.0;                                           
        gl_TessLevelOuter[3] = 5.0;                   
    } 
    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; 
}                                                                             
  • 曲面細(xì)分控制著色器
# version 420 core  
                                                                
layout (quads) in;                                                                   
                                                                
void main(void)                                                                      
{                                             
    vec4 p1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);       
    vec4 p2 = mix(gl_in[2].gl_Position, gl_in[3].gl_Position, gl_TessCoord.x);       
    gl_Position = mix(p1, p2, gl_TessCoord.y);                                       
}

上述著色器運(yùn)行后的效果如下圖所示

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

我們簡(jiǎn)單介紹一下著色器代碼中比較重要的部分

要點(diǎn)1:gl_TessLevelInner用來控制內(nèi)部細(xì)分的等級(jí)
要點(diǎn)2:gl_TessLevelOuter用來控制外部細(xì)分的等級(jí)
要點(diǎn)3:layout (quads) in四邊形模式的特殊限定符

我們可以很明顯的看出來外部邊被分成了5-3-5-3,對(duì)應(yīng)著我們上部分gl_TessLevelOuter設(shè)置的細(xì)分等級(jí)

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

我們也可以很明顯的看出來內(nèi)部被分成了9*7的區(qū)域,對(duì)應(yīng)著我們上部分gl_TessLevelInner設(shè)置的細(xì)分等級(jí)

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 使用三角形的曲面細(xì)分

同理我們先看一下著色器代碼和最終的顯示效果

  • 曲面細(xì)分控制著色器
# version 420 core 
                                                                                  
layout (vertices = 3) out;                                                        
                                                                                  
void main(void)                                                                   
{                                                                                 
    if (gl_InvocationID == 0)                                                     
    {                                                                             
        gl_TessLevelInner[0] = 5.0;                                               
        gl_TessLevelOuter[0] = 8.0;                                               
        gl_TessLevelOuter[1] = 8.0;                                               
        gl_TessLevelOuter[2] = 8.0;                                               
    }                                                                             
    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;     
}                                                                                                                                                            
  • 曲面細(xì)分控制著色器
# version 420 core 
                                                                                  
layout (triangles) in;                                                            
                                                                                  
void main(void)                                                                   
{                                                                                 
    gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +                       
                  (gl_TessCoord.y * gl_in[1].gl_Position) +                       
                  (gl_TessCoord.z * gl_in[2].gl_Position);                        
}                                                                                 

上述著色器運(yùn)行后的效果如下圖所示

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

我們簡(jiǎn)單介紹一下著色器代碼中比較重要的部分

要點(diǎn)1:gl_TessLevelInner數(shù)組的第一個(gè)元素,該級(jí)別應(yīng)用于曲面細(xì)分三角形的整個(gè)內(nèi)部區(qū)域
要點(diǎn)2:gl_TessLevelOuter數(shù)組的前三個(gè)元素用于設(shè)置三角形三條邊的曲面細(xì)分因子
要點(diǎn)3:layout (triangles) in三角形模式的特殊限定符

我們可以很明顯的看出來三條邊都被分成了8分,對(duì)應(yīng)著我們上部分gl_TessLevelOuter設(shè)置的細(xì)分等級(jí)

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

下圖依次展示了gl_TessLevelInner內(nèi)部細(xì)分等級(jí)2-5的效果,細(xì)分等級(jí)越大,內(nèi)部細(xì)分的越復(fù)雜

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 使用等值線的曲面細(xì)分

同理我們先看一下著色器代碼和最終的顯示效果

  • 曲面細(xì)分控制著色器
# version 420 core  
                                                                                    
layout (vertices = 4) out;                                                          
                                                                                    
void main(void)                                                                     
{                                                                                   
    if (gl_InvocationID == 0)                                                       
    {                                                                               
        gl_TessLevelOuter[0] = 5.0;                                                 
        gl_TessLevelOuter[1] = 5.0;                                                 
    }                                                                               
    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;       
}                                                                                                                                                                           
  • 曲面細(xì)分控制著色器
# version 420 core  
                                                                                     
layout (isolines) in;                                                                
                                                                                     
void main(void)                                                                      
{                                                                                    
    float r = (gl_TessCoord.y + gl_TessCoord.x / gl_TessLevelOuter[0]);              
    float t = gl_TessCoord.x * 2.0 * 3.14159;                                        
    gl_Position = vec4(sin(t) * r, cos(t) * r, 0.5, 1.0);                            
}                                                                                                                                                                   

上述著色器運(yùn)行后的效果如下圖所示

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分

我們簡(jiǎn)單介紹一下著色器代碼中比較重要的部分

要點(diǎn)1:gl_TessLevelInner不在使用
要點(diǎn)2:gl_TessLevelOuter的前兩個(gè)分量中的兩個(gè)外部曲面細(xì)分因子分別用于確定線條數(shù)量以及每條線上的線段數(shù)量
要點(diǎn)3:layout (isolines) in等值線模式的特殊限定符


? 曲面細(xì)分點(diǎn)模式

使用point_model布局限定符,可將生成的頂點(diǎn)按照獨(dú)立點(diǎn)進(jìn)行渲染

  • 曲面細(xì)分控制著色器
# version 420 core   
                                                                                  
layout (triangles, point_mode) in;                                                
                                                                                  
void main(void)                                                                   
{                                                                                 
    gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +                       
                  (gl_TessCoord.y * gl_in[1].gl_Position) +                       
                  (gl_TessCoord.z * gl_in[2].gl_Position);                        
}                                                                                                      

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 曲面細(xì)分子分段模式

在一定情況下我們可以調(diào)整對(duì)已生成基元的邊緣的分段方式,下面介紹一下幾種分段方式的效果和特定布局限定符

? 等間距模式

使用限定符equal_spacing,在著色器中的寫法如下,效果就是邊緣等分,如下圖

layout (triangles, equal_spacing) in; 

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 分段長(zhǎng)度模式

使用限定符fractional_even_spacingfractional_odd_spacing,在著色器中的寫法如下,效果就是根據(jù)情況對(duì)邊緣進(jìn)行不等分,如下圖

layout (triangles, fractional_even_spacing) in; 

layout (triangles, fractional_odd_spacing) in; 

OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分
OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分


? 控制環(huán)繞順序

使用以下布局限定符指定順時(shí)針環(huán)繞順序

layout (cw) in;

要指定曲面細(xì)分引擎所生成的基元環(huán)繞順序是逆時(shí)針,需要添加此限定符

layout (ccw) in;

? 數(shù)據(jù)在曲面細(xì)分著色器之間的傳遞

曲面細(xì)分控制著色器的輸入和輸出都用數(shù)組表示,輸入數(shù)組的尺寸根據(jù)每個(gè)面片中的控制點(diǎn)數(shù)量確定,通過調(diào)用以下函數(shù)設(shè)置

glPatchParameteri(GL_PATCH_VERTICES,n);

注:表示每個(gè)面片的頂點(diǎn)數(shù)量。默認(rèn)情況下,每個(gè)面片的頂點(diǎn)數(shù)量為3

曲面細(xì)分控制著色器的輸出也是數(shù)組,但其尺寸通過著色器前方的頂點(diǎn)輸出布局限定符設(shè)置

某些簡(jiǎn)單的渲染流程可以不包含曲面細(xì)分控制著色器,當(dāng)不存在曲面細(xì)分控制著色器時(shí),所有內(nèi)外部曲面細(xì)分等級(jí)的默認(rèn)值為1.0??赏ㄟ^調(diào)用glPatchParameterfv()更改此設(shè)置,其原型為

void glPatchParameterfv (GLenum pnameconst GLfloat * values);

? 推送

  • Github
https://github.com/KingSun5

? 結(jié)語

若是覺得博主的文章寫的不錯(cuò),不妨關(guān)注一下博主,點(diǎn)贊一下博文,另博主能力有限,若文中有出現(xiàn)什么錯(cuò)誤的地方,歡迎各位評(píng)論指摘。文章來源地址http://www.zghlxwxcb.cn/news/detail-471612.html

?? 本文屬于原創(chuàng)文章,轉(zhuǎn)載請(qǐng)?jiān)u論留言,并在轉(zhuǎn)載文章頭部著名作者出處??

到了這里,關(guān)于OpenGL超級(jí)寶典第八章學(xué)習(xí)筆記:基元處理之曲面細(xì)分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 自然語言處理: 第八章chatGPT的搭建

    自然語言處理: 第八章chatGPT的搭建

    Transformer 大模型家族可以分成三類, 至于三者的區(qū)別可以參考上一章: Encoder-only, Decoder-only, 只需要Pre_train Encoder-decoder , 可以在一些任務(wù)上無需進(jìn)行fine_tune 必須要在下游任務(wù)進(jìn)行微調(diào)比如Bert , Bart 。 T5 這種無需要微調(diào)就能完成一些任務(wù) 。最后GPT從3開始,只需要預(yù)訓(xùn)練就能適

    2024年02月12日
    瀏覽(22)
  • javacv從入門到精通進(jìn)階——第八章:視頻流處理

    JavaCV提供了使用FFmpeg對(duì)視頻流進(jìn)行處理和推送的功能。下面是使用JavaCV進(jìn)行視頻流處理和推送的一般步驟: 創(chuàng)建FFmpegFrameGrabber并設(shè)置輸入U(xiǎn)RL: 創(chuàng)建FFmpegFrameRecorder并設(shè)置輸出URL、寬度和高度: 通過grabber.grabImage()逐幀抓取視頻流: 最后,通過grabber.stop()和recorder.stop()停止處理

    2023年04月13日
    瀏覽(19)
  • 華為HCIA筆記第八章 VLAN原理和配置

    華為HCIA筆記第八章 VLAN原理和配置

    默認(rèn)情況下交換機(jī)所有接口屬于一個(gè)廣播域(局域網(wǎng)) 網(wǎng)絡(luò)規(guī)模的增加,多個(gè)交換機(jī)互聯(lián),廣播域變得越來越大,造成以下問題: 廣播泛濫 安全風(fēng)險(xiǎn) 設(shè)備性能下降 VLAN技術(shù)將一個(gè)大的廣播域劃分成多個(gè)小的廣播域 8.2.1 實(shí)現(xiàn)方式 在數(shù)據(jù)幀中插入VLAN Tag 形成802.1Q幀: 數(shù)據(jù)幀結(jié)

    2024年01月25日
    瀏覽(19)
  • OBCP第八章 OB運(yùn)維、監(jiān)控與異常處理-日常運(yùn)維操作

    OBCP第八章 OB運(yùn)維、監(jiān)控與異常處理-日常運(yùn)維操作

    白屏: 集群、Zone、Observer 常用運(yùn)維操作 ?常用運(yùn)維操作 運(yùn)維場(chǎng)景 步驟 時(shí)鐘同步 OceanBase從Partition的多個(gè)副本中選出主對(duì)外提供服務(wù)。為避免Paxos的活鎖問題,OceanBase 采用一種基于時(shí)鐘的選舉算法選主 檢查 NTP 狀態(tài):運(yùn)行 ntpstat 檢查 NTP 服務(wù)器狀態(tài)。如果結(jié)果為 synchronised to

    2023年04月08日
    瀏覽(49)
  • 【Rust】Rust學(xué)習(xí) 第八章常見集合

    【Rust】Rust學(xué)習(xí) 第八章常見集合

    Rust 標(biāo)準(zhǔn)庫中包含一系列被稱為? 集合 ( collections )的非常有用的數(shù)據(jù)結(jié)構(gòu)。大部分其他數(shù)據(jù)類型都代表一個(gè)特定的值,不過集合可以包含多個(gè)值。不同于內(nèi)建的數(shù)組和元組類型,這些集合指向的數(shù)據(jù)是儲(chǔ)存在堆上的,這意味著數(shù)據(jù)的數(shù)量不必在編譯時(shí)就已知,并且還可以隨

    2024年02月13日
    瀏覽(35)
  • 系統(tǒng)集成項(xiàng)目管理工程師 筆記(第八章:項(xiàng)目進(jìn)度管理)

    系統(tǒng)集成項(xiàng)目管理工程師 筆記(第八章:項(xiàng)目進(jìn)度管理)

    項(xiàng)目進(jìn)度管理包括為管理項(xiàng)目按時(shí)完成所需的7個(gè)過程,具體為: (1) 規(guī)劃進(jìn)度管理 過程:制定政策、程序和文檔以管理項(xiàng)目進(jìn)度。 (2) 定義活動(dòng) 過程:識(shí)別和記錄為完成項(xiàng)目可交付成果而需采取的具體行動(dòng)。 (3) 排列活動(dòng)順序 過程:識(shí)別和記錄項(xiàng)目活動(dòng)之間的關(guān)系。

    2023年04月25日
    瀏覽(96)
  • 統(tǒng)計(jì)學(xué)習(xí)導(dǎo)論(ISLR) 第八章樹模型課后習(xí)題

    統(tǒng)計(jì)學(xué)習(xí)導(dǎo)論(ISLR) 第八章樹模型課后習(xí)題

    ??個(gè)人主頁:JOJO數(shù)據(jù)科學(xué) ??個(gè)人介紹: 統(tǒng)計(jì)學(xué)top3 高校統(tǒng)計(jì)學(xué)碩士在讀 ??如果文章對(duì)你有幫助,歡迎? 關(guān)注 、?? 點(diǎn)贊 、? 收藏 、?? 訂閱 專欄 ?本文收錄于【R語言數(shù)據(jù)科學(xué)】 本系列主要介紹R語言在數(shù)據(jù)科學(xué)領(lǐng)域的應(yīng)用包括: R語言編程基礎(chǔ)、R語言可視化、R語言進(jìn)

    2024年02月12日
    瀏覽(25)
  • (數(shù)字圖像處理MATLAB+Python)第八章圖像復(fù)原-第一、二節(jié):圖像復(fù)原概述和圖像退化模型

    (數(shù)字圖像處理MATLAB+Python)第八章圖像復(fù)原-第一、二節(jié):圖像復(fù)原概述和圖像退化模型

    圖像復(fù)原 :在圖像生成、記錄、傳輸過程中,由于成像系統(tǒng)、設(shè)備或外在的干擾,會(huì)導(dǎo)致圖像質(zhì)量下降,稱為 圖像退化 ,如大氣擾動(dòng)效應(yīng)、光學(xué)系統(tǒng)的像差、物體運(yùn)動(dòng)造成的模糊、幾何失真等。圖像復(fù)原是指通過使用圖像處理技術(shù)來恢復(fù)受損圖像的原始信息,使其盡可能接

    2024年02月12日
    瀏覽(114)
  • (數(shù)字圖像處理MATLAB+Python)第八章圖像復(fù)原-第五、六節(jié):盲去卷積復(fù)原和幾何失真校正

    (數(shù)字圖像處理MATLAB+Python)第八章圖像復(fù)原-第五、六節(jié):盲去卷積復(fù)原和幾何失真校正

    盲去卷積復(fù)原 :當(dāng)我們考慮圖像復(fù)原中的盲去卷積復(fù)原時(shí),我們可以使用以下數(shù)學(xué)符號(hào)和方程來描述該問題 原始圖像 :我們用I表示原始圖像,其中I是一個(gè)二維離散函數(shù)。 I ( x , y ) I(x, y) I ( x , y ) 表示在坐標(biāo) ( x , y ) (x, y) ( x , y ) 處的圖像強(qiáng)度值 模糊核 :我們用 H H H 表示未

    2024年02月04日
    瀏覽(24)
  • 第八章:L2JMobius學(xué)習(xí) – 游戲服務(wù)GameServer講解

    第八章:L2JMobius學(xué)習(xí) – 游戲服務(wù)GameServer講解

    本章節(jié)我們來講解GameServer服務(wù),首先來查看它的文件結(jié)構(gòu) 接下來,我們還是先研究network網(wǎng)絡(luò)數(shù)據(jù)通信部分。 接下來,我們介紹GameServer與玩家客戶端之間的通信。當(dāng)我們啟動(dòng)GameServer服務(wù)的時(shí)候,他會(huì)啟動(dòng)一個(gè)NetServer服務(wù)類,這個(gè)類我們之前已經(jīng)講過了。它里面有一個(gè)Server

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包