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

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

這篇具有很好參考價值的文章主要介紹了計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在20世紀(jì)50年代和60年代在雷諾公司工作期間,皮埃爾·貝塞爾(Pierre Bézier)開發(fā)了用于設(shè)計汽車車身的軟件系統(tǒng)。他的程序利用了Paul de Casteljau之前開發(fā)的數(shù)學(xué)方程組,后者曾為競爭對手雪鐵龍汽車制造商[BE72,DC63]工作。de Casteljau方程僅使用幾個標(biāo)量參數(shù)描述曲線,同時使用一種高明的的遞歸算法,稱為“de Casteljau算法”,就可以生成任意精度的曲線?,F(xiàn)在它們分別被稱為“貝塞爾曲線”和“貝塞爾曲面”,這些方法通常用于高效地對各種曲面3D物體進行建模。
參考這個
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

11.1 二次貝塞爾曲線(三點)

二次貝塞爾曲線由一組參數(shù)方程定義,方程組中使用3個控制點指定特定的曲線的形狀,每個控制點都是2D空間中的一個點??紤]圖11.1中所示的一組3個點[p0,p1,p2]。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.1 貝塞爾曲線的控制點

通過引入?yún)?shù)t,我們可以構(gòu)建一個用來定義曲線的參數(shù)方程組。表示從一個控制點到另一控制點間線段距離的分?jǐn)?shù)。對于在線段上的點,t的值在[0…1]的范圍內(nèi)。圖11.2顯示了一個這樣的值:t=0.75,分別應(yīng)用于連接
p0-p1,p1-p2的線段。通過t在兩條原始線段上定義了兩個新點p01(t)和p12(t)。我們對連接兩個新點p01(t)和p12(t)
的線段重復(fù)該過程,產(chǎn)生點P(t),其中沿線段p01(t)和p12(t)在t=0.75得到點P(t)。P(t)是最終得到的曲線上的點,因此用大寫字母P表示。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.2 參數(shù)位置處的點t=0.75

針對各種t值收集大量的點P(t),則會產(chǎn)生一條曲線,如圖11.3所示。采樣的t的參數(shù)值越多,生成的點P(t)越多,得到的曲線則越平滑。
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.3 建立二次貝塞爾曲線

現(xiàn)在可以導(dǎo)出二次貝塞爾曲線的分析定義。首先,我們注意到連接兩個點pa和pb的線段pa-pb上的任意點p可以用參數(shù)t表示如下:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面
使用該等式,我們解出點p01和p12(分別在p0-p1,p1-p2上的點)如下:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

同理,在這兩點所連接的線段上的點可以表示為:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面
替換p12和p01的定義得:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

分解并重新合并各項可得:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

其中

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

因此,我們通過控制點的加權(quán)和解出曲線上的任意點。加權(quán)函數(shù)B通常被稱為“混合函數(shù)”(盡管名稱“B”實際上源自Sergei Bernstein [BE16],他首先描述了這個多項式族)。請注意,混合函數(shù)的形式都是二次的,這就是為什么得到的曲線稱為二次貝塞爾曲線。

11.2 三次貝塞爾曲線(四點)

我們現(xiàn)在將曲線模型擴展到4個控制點,就會得到一個三次貝塞爾曲線,如圖11.4所示。與二次曲線相比,三次貝塞爾曲線能夠定義的形狀更加豐富,而二次曲線僅限于定義凹形。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.4 建立一個三次貝塞爾曲線

同二次曲線時的情形,我們可以推導(dǎo)出三次貝塞爾曲線的解析定義:
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

曲線上的點則是:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

使用p12-23和p01-12的定義替換等式中的項,再合并得:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面
其中
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

渲染貝塞爾曲線時,可以使用許多不同的技術(shù)。其中一種方法是,使用固定的增量,在0.0~1.0范圍內(nèi),迭代增加得出t的后繼值。

例如,當(dāng)增量為0.1時,我們可以使用t值為0.0、0.1、0.2、0.3等的循環(huán)。對于t的每個值,計算貝塞爾曲線上的對應(yīng)點,并繪制連接連續(xù)點的一系列線段,如圖11.5中的算法所述。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.5 渲染貝塞爾曲線的迭代算法

另一種方法是使用de Casteljau算法遞歸地將曲線對半細(xì)分,其中,在每個遞歸步驟t=1/2。圖11.6展示了左側(cè)曲線細(xì)分后的新三次控制點(q0,q1,q2,q3),以綠色顯示(見彩插)。該算法由de Casteljau提出(完整推導(dǎo)見[AS14])。
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.6 細(xì)分三次貝塞爾曲線

算法見圖11.7。該算法重復(fù)將曲線段細(xì)分為兩半的過程,直到每個曲線段足夠直,進一步的細(xì)分不會產(chǎn)生實際的好處。在極限情況下(隨著生成的控制點越來越靠近),曲線段本身實際上與第一個控制點和最后一個控制點(
q0和q3)之間的線段相同。因此,可以通過比較從第一控制點到最后一個控制點的距離與連接4個控制點的3條線段的長度之和來確定曲線段是否“足夠直”:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

當(dāng)D1-D2小于一個足夠小的閾值時,進一步的細(xì)分就沒有意義了。

de Casteljau算法有一個有趣的特性,它可以在不使用之前描述的混合函數(shù)的情況下,生成曲線上所有的點。同時請注意,p(1/2)處的中心點是“共享”的,即它既是左細(xì)分中最右的控制點,也是右細(xì)分中最左的控制點。它可以使用t=1/2處的混合函數(shù)或使用由de Casteljau導(dǎo)出的公式(q2+r1)/2來計算。

另請注意,圖11.7中所示的subdivide()函數(shù)假定傳入的參數(shù) p、q和r是“引用”參數(shù),因此,圖11.7上方列出的drawBezierCurve函數(shù)對于subdivide()的調(diào)用,導(dǎo)致subdivide()函數(shù)中的計算修改了調(diào)用中所傳的實際參數(shù)。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.7 貝塞爾曲線的遞歸細(xì)分算法

11.3 二次貝塞爾曲面(3x3控制點)

貝塞爾曲線定義了曲線(在2D或3D空間中),而貝塞爾曲面定義了3D空間中的曲面。將我們在曲線中看到的概念擴展到曲面,需要將參數(shù)方程組中的參數(shù)個數(shù)從一個擴展到兩個。對于貝塞爾曲線,我們將參數(shù)稱為t。對于貝塞爾曲面,我們將參數(shù)稱為u和v。曲線由點P(t)組成,而曲面將由點 P(u,v)組成,如圖11.8所示。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.8 參數(shù)曲面

對于二次貝塞爾曲面,每個軸u和v上有3個控制點,總共9個控制點。圖11.9(見彩插)使用藍色展示了一組共9個控制點(通常稱為控制點“網(wǎng)格”)的示例,以及相應(yīng)的曲面(紅色)。
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.9 二次貝塞爾控制網(wǎng)格和相應(yīng)的表面

網(wǎng)格中的9個控制點標(biāo)記為pij,其中i和j分別代表u和v方向上的索引。每組3個相鄰控制點(例如(p00,p01,p02))會定義一條貝塞爾曲線。然后將表面上的點P(u,v)定義為兩個混合函數(shù)的和,一個在u方向,一個在v方向。則用于構(gòu)建貝塞爾曲面的兩個混合函數(shù)的形式遵循先前為貝塞爾曲線給出的方法:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

接下來生成構(gòu)成貝塞爾曲面的點P(u,v)。對于每個控制點pij將其與第i個混合函數(shù)在u處的值相乘,再與第j個混合函數(shù)在v處的值相乘。最后將所有控制點的結(jié)果求和,生成貝塞爾曲面上的點 P(u,v)
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

組成貝塞爾曲面的生成點集有時會稱為補丁。術(shù)語“補丁”有時 會讓人感到困惑,我們稍后在研究曲面細(xì)分著色器時會看到(對于實 際實現(xiàn)貝塞爾曲面非常有用)。因為通常控制點組成的網(wǎng)格才稱為 “補丁”。

11.4 三次貝塞爾曲面(4x4控制點)

從二次曲面到三次曲面需要使用更大的網(wǎng)格——4×4而非3×3。 圖11.10(見彩插)顯示了16控制點網(wǎng)格(藍色)和相應(yīng)曲面(紅色)的示例。
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.10 三次貝塞爾控制網(wǎng)格和相應(yīng)的曲面

同上,我們可以通過組合三次貝塞爾曲線的相關(guān)混合函數(shù)來推導(dǎo)表面上的點P(u,v)的公式:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面
其中:
計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面
渲染貝塞爾曲面也可以通過遞歸細(xì)分[AS14]完成,方法是交替地將曲面沿每個維度分成兩半,如圖11.11所示。每個細(xì)分產(chǎn)生4個新的控制點網(wǎng)格,每個網(wǎng)格包含16個點,這些點定義了曲面的一個象限。

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

圖11.11 貝塞爾曲面的遞歸細(xì)分

當(dāng)渲染貝塞爾曲線時,我們在曲線“足夠直”時停止細(xì)分。而對于貝塞爾曲面,我們在曲面“足夠平坦”時停止遞歸。一種實現(xiàn)方法是,確保子象限控制網(wǎng)格上所有遞歸生成的點,距由該網(wǎng)格的4個角點中的3個定義的平面的距離,都小于一個允許的范圍。點(x,y,z)與平面(A,B,C,D)之間的距離d為:

計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面

如果小于某個足夠小的閾值,則我們停止細(xì)分過程,并簡單地使d用子象限網(wǎng)格的4個角的控制點來繪制兩個三角形。

對于貝塞爾曲線,OpenGL管線的細(xì)分階段為基于圖11.5中的迭代算法渲染貝塞爾曲面提供了一種有吸引力的替代方法。其策略是讓曲面細(xì)分生成一個大的頂點網(wǎng)格,然后使用混合函數(shù)將這些頂點重新定位到貝塞爾曲面上,由三次貝塞爾控制點指定。我們在第12章中實現(xiàn)了這一點。

補充說明

本章重點介紹參數(shù)貝塞爾曲線和曲面的數(shù)學(xué)基礎(chǔ)。我們推遲了在OpenGL中呈現(xiàn)其中任何一個的實現(xiàn),因為實現(xiàn)它們需要適當(dāng)?shù)那婕?xì)分著色器知識作為載體,我們將在下一章中進行介紹。我們還跳過了一些推導(dǎo)過程,例如遞歸細(xì)分算法。

在3D圖形中,使用貝塞爾曲線建模對象有許多優(yōu)點。首先,理論上,這些物體可以任意縮放,并且仍然保持光滑的表面而不“像素化”。其次,許多由復(fù)雜曲線組成的物體可以使用貝塞爾控制點集合進行更有效的存儲,而不是存儲數(shù)千個頂點。

除計算機圖形和汽車外,貝塞爾曲線還有許多實際應(yīng)用。在橋梁設(shè)計中也可以找到它們的身影,例如耶路撒冷的Chords Bridge[CB16]。類似的技術(shù)也用于構(gòu)建TrueType字體,因此可以將其縮放到任意大小,或者將視角任意拉近觀看,而字體邊緣始終保持平滑。文章來源地址http://www.zghlxwxcb.cn/news/detail-483056.html

到了這里,關(guān)于計算機圖形學(xué)與opengl C++版 學(xué)習(xí)筆記 第11章 參數(shù)曲面的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • golang,OpenGL,計算機圖形學(xué)(三)

    golang,OpenGL,計算機圖形學(xué)(三)

    代碼倉庫 https://github.com/phprao/go-graphic 顏色 光源照射到物體上,一部分顏色被吸收,另一部分無法吸收的被反射到人眼,于是呈現(xiàn)出了顏色。 當(dāng)我們把光源的顏色與物體的顏色值 相乘 (而不是點乘),所得到的就是這個物體所反射的顏色。由此,我們可以定義物體的顏色為

    2024年02月12日
    瀏覽(53)
  • 【計算機圖形學(xué)】OpenGL遞歸實現(xiàn)光線追蹤

    【計算機圖形學(xué)】OpenGL遞歸實現(xiàn)光線追蹤

    計算機圖形學(xué)課程設(shè)計:基于面向?qū)ο蟮墓饩€跟蹤算法設(shè)計與實現(xiàn) 目錄 一、前言 二、項目實現(xiàn)與說明 1. 數(shù)據(jù)結(jié)構(gòu)設(shè)計 1.1 光線 Ray 1.2 材質(zhì) Material 1.3 光照 Light 1.4 相機 Camera 1.5 球體Sphere 1.6 場景Scene 2. 算法實現(xiàn) 2.1 光線追蹤算法原理與步驟 2.2 計算觀察光線 2.3 光線與物體(球

    2024年02月08日
    瀏覽(20)
  • 計算機圖形學(xué)實驗四 OpenGL的鼠標(biāo)交互繪制

    一、實驗?zāi)康?1.掌握OpenGL的鼠標(biāo)按鈕響應(yīng)函數(shù)。 2.掌握OpenGL的鼠標(biāo)移動響應(yīng)函數(shù)。 3.進一步鞏固OpenGL的基本圖元繪制基礎(chǔ)。 二、實驗內(nèi)容 1.鼠標(biāo)畫草圖——實現(xiàn)鼠標(biāo)點到哪,線就畫到哪。 思路: 1)在主程序注冊鼠標(biāo)響應(yīng)和鼠標(biāo)移動子函數(shù): glutMouseFunc(mymouse); glutMotionFunc(mym

    2023年04月20日
    瀏覽(104)
  • GAMES101 計算機圖形學(xué) | 學(xué)習(xí)筆記 (上)

    GAMES101 計算機圖形學(xué) | 學(xué)習(xí)筆記 (上)

    1. C++中安裝opencv庫 2. C++中安裝eigen庫 3. C++中安裝openGL庫 步驟(1)glut下載 4. C++安裝openGL庫 步驟(2)VS中安裝兩個NuGet程序包 5. C++安裝glew和glfw工具庫 要注意的是 glew.h必須包含再glut.h之前 。 如下: 計算機圖形學(xué)是利用計算機技術(shù)進行圖像和視覺內(nèi)容的創(chuàng)建、處理和顯示的領(lǐng)

    2024年02月03日
    瀏覽(22)
  • 【計算機圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    【計算機圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    傳送門 實現(xiàn)多邊形掃描線填充算法,并和鼠標(biāo)進行交互。 具體原理略過,會貼上完整代碼,可直接運行。 環(huán)境: vs2019,OpenGL的庫(可以搜索如何用vs使用OpenGL的庫,可以使用vs自帶的插件或者其他方法,很方便) 要點: 1.NET和AET的創(chuàng)建,改動 2.改變鼠標(biāo)點擊和鼠標(biāo)拖拽的響應(yīng)

    2023年04月08日
    瀏覽(100)
  • 計算機圖形學(xué),OpenGL編寫的一個可實現(xiàn)旋轉(zhuǎn)縮放移動的房間,內(nèi)有數(shù)十種交互

    計算機圖形學(xué),OpenGL編寫的一個可實現(xiàn)旋轉(zhuǎn)縮放移動的房間,內(nèi)有數(shù)十種交互

    #include stdlib.h #includestdio.h #includewindows.h #include GL/glut.h #include math.h #include gl/GLU.h //顏色宏定義 #define white 1.0f, 1.0f, 1.0f #define black 0.0f, 0.0f, 0.0f #define red 1.0f, 0.0f, 0.0f #define blue 0.0f, 0.0f, 1.0f #define skyBlue 135.0/255.0, 206.0/255.0, 1.0f #define plum 1.0f, 187.0/255.0, 1.0f //淺紫色 #define pink 1.0f, 1

    2024年04月17日
    瀏覽(32)
  • Python+OpenCV 零基礎(chǔ)學(xué)習(xí)筆記(4-5):計算機圖形基礎(chǔ)+Python相對文件路徑+OpenCV圖像+OpenCV視頻

    Python+OpenCV 零基礎(chǔ)學(xué)習(xí)筆記(4-5):計算機圖形基礎(chǔ)+Python相對文件路徑+OpenCV圖像+OpenCV視頻

    【2022B站最好的OpenCV課程推薦】OpenCV從入門到實戰(zhàn) 全套課程 CSDN標(biāo)題里個括號對應(yīng)視頻的分P OpenCV+Python CSDN專欄 Gitee 項目地址 Python:3.11.5 Anaconda:23.7.4 IDE:vscode 運行環(huán)境:Windows OpenCV:4.8.1 Python+OpenCV 零基礎(chǔ)學(xué)習(xí)筆記(1-3):anaconda+vscode+jupyter環(huán)境配置 本節(jié)課來了解以下OpenCV的簡單使用

    2024年02月03日
    瀏覽(27)
  • 計算機圖形學(xué) 期末復(fù)習(xí)筆記

    目錄 第一章-導(dǎo)論 1. 計算機圖形學(xué)的定義 2. 計算機圖形學(xué)的應(yīng)用領(lǐng)域 2.1 計算機圖形學(xué)與其他學(xué)科的關(guān)系 3. 圖形顯示器的發(fā)展及其工作原理 3.1 陰極射線管(CRT) 3.2 隨機掃描顯示器 3.3 直視存儲管顯示器 3.4 光柵掃描顯示器 4. 圖形軟件標(biāo)準(zhǔn)的形成 5. 三維圖形渲染管線 第二章

    2024年02月12日
    瀏覽(27)
  • Part1:使用 TensorFlow 和 Keras 的 NeRF計算機圖形學(xué)和深度學(xué)習(xí)——計算機圖形學(xué)世界中相機的工作原理

    Part1:使用 TensorFlow 和 Keras 的 NeRF計算機圖形學(xué)和深度學(xué)習(xí)——計算機圖形學(xué)世界中相機的工作原理

    是否有一種方法可以僅從一個場景多張不同視角的照片中捕獲整個3D場景? 有。 NeRF:將場景表示為用于視圖合成的神經(jīng)輻射場中(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis),Mildenhall等人(2020)的論文解答了這個問題。NeRF的更簡單實現(xiàn)贏得了 TensorFlow社區(qū)聚光

    2024年02月07日
    瀏覽(29)
  • 《計算機系統(tǒng)2》學(xué)習(xí)筆記

    《計算機系統(tǒng)2》學(xué)習(xí)筆記

    目錄 計算機系統(tǒng)漫游 Amdahl定理 信息的表示和處理 信息存儲 進制轉(zhuǎn)化 小端法 大端法 布爾代數(shù) 位級運算 邏輯運算 移位運算 整數(shù)表示 無符號數(shù)編碼 補碼編碼 有符號數(shù)和無符號數(shù)之間的轉(zhuǎn)換 擴展數(shù)的位表示 截斷數(shù)字 整數(shù)運算 無符號加法 無符號數(shù)求反 有符號整數(shù)加法 補碼

    2024年02月11日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包