最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

渲染的開(kāi)始

2023-07-20 16:03 作者:追逐彗星的尾巴  | 我要投稿

圖形渲染管線(xiàn)

圖形渲染管線(xiàn)(Graphics Pipeline)指的是完成將3D場(chǎng)景轉(zhuǎn)化為最終在屏幕上顯示的2D圖像的過(guò)程。圖形渲染管線(xiàn)分為兩個(gè)主要階段:幾何渲染階段和光柵化階段。

幾何渲染階段

幾何數(shù)據(jù)輸入:3D場(chǎng)景中的模型、相機(jī)、燈光等數(shù)據(jù)被輸入到渲染管線(xiàn)中。

頂點(diǎn)著色器(Vertex Shader):對(duì)輸入的3D模型的頂點(diǎn)進(jìn)行變換、投影和裁剪等操作,將其轉(zhuǎn)換到屏幕空間。

圖元裝配(Primitive Assembly):將頂點(diǎn)組裝成基本的圖元,如點(diǎn)、線(xiàn)段或三角形。

幾何著色器(Geometry Shader,可選):在一些現(xiàn)代的圖形渲染管線(xiàn)中,可以使用幾何著色器進(jìn)一步處理圖元,如生成新的幾何圖元或?qū)ΜF(xiàn)有圖元進(jìn)行變換。

面剔除(Face Culling,可選):根據(jù)需要,可以剔除不可見(jiàn)的面,以提高渲染性能。

光柵化階段

光柵化(Rasterization):將圖元轉(zhuǎn)換為屏幕上對(duì)應(yīng)的像素點(diǎn),并生成片元(Fragment)。

片元處理(Pixel Processing):對(duì)每個(gè)片元進(jìn)行插值、紋理采樣、光照計(jì)算等處理。

片段著色器(Fragment Shader):對(duì)每個(gè)像素執(zhí)行著色操作,確定最終像素的顏色和特性。

深度測(cè)試(Depth Testing):根據(jù)深度值來(lái)確定像素是否可見(jiàn),遮擋面會(huì)被丟棄。

幀緩沖輸出:最終渲染結(jié)果會(huì)輸出到幀緩沖(Frame Buffer),并在屏幕上顯示。

著色器

著色器(Shader)是一種特殊程序,用于描述在圖形渲染管線(xiàn)的不同階段對(duì)圖形數(shù)據(jù)的處理和著色過(guò)程。著色器主要用于在GPU(圖形處理單元)上執(zhí)行高度并行的圖形計(jì)算,從而實(shí)現(xiàn)對(duì)3D場(chǎng)景中的幾何對(duì)象和圖像的渲染、著色和效果處理。著色器主要分為頂點(diǎn)著色器、幾何著色器、片段著色器(也叫像素著色器)三個(gè)類(lèi)型。在OpenGL中,著色器是用OpenGL著色器語(yǔ)言(OpenGL Shading Language,?GLSL)寫(xiě)成的。

在OpenGL中,我們必須定義至少一個(gè)頂點(diǎn)著色器和一個(gè)片段著色器(因?yàn)镚PU中沒(méi)有默認(rèn)的頂點(diǎn)/片段著色器)。

頂點(diǎn)

OpenGL中,一個(gè)頂點(diǎn)(Vertex)是一個(gè)3D坐標(biāo)的數(shù)據(jù)的集合。頂點(diǎn)屬性(Vertex Attribute)是指一組用于描述頂點(diǎn)的各個(gè)特征屬性的數(shù)據(jù),每個(gè)頂點(diǎn)可以具有多個(gè)屬性,例如位置、顏色、法線(xiàn)方向、紋理坐標(biāo)等。一系列頂點(diǎn)的集合稱(chēng)為頂點(diǎn)數(shù)據(jù)(Vertex Data),它是由頂點(diǎn)屬性表示的。通常,頂點(diǎn)屬性/數(shù)據(jù)會(huì)以數(shù)組的形式傳遞給OpenGL,并且每個(gè)數(shù)組元素對(duì)應(yīng)一個(gè)頂點(diǎn)的所有屬性值。在渲染過(guò)程中,OpenGL會(huì)按頂點(diǎn)的順序來(lái)使用這些屬性,從而構(gòu)建出圖形模型。

由于OpenGL是一個(gè)3D圖形庫(kù),所以在OpenGL中我們指定的所有坐標(biāo)都是3D坐標(biāo)(x、y和z),并且僅當(dāng)x、y、z都在-1.0到1.0的范圍內(nèi)時(shí)才處理它。所有在這個(gè)范圍內(nèi)的坐標(biāo)叫做標(biāo)準(zhǔn)化設(shè)備坐標(biāo)(Normalized Device Coordinates),此范圍內(nèi)的坐標(biāo)最終顯示在屏幕上(在這個(gè)范圍以外的坐標(biāo)則不會(huì)顯示)。

假設(shè)我們需要渲染一個(gè)三角形,我們一共要指定三個(gè)頂點(diǎn),并把它們放在一個(gè)數(shù)組中。

定義這樣的頂點(diǎn)數(shù)據(jù)以后,我們會(huì)把它發(fā)送給頂點(diǎn)著色器。它會(huì)在GPU上創(chuàng)建內(nèi)存用于儲(chǔ)存這些頂點(diǎn)數(shù)據(jù)。我們通過(guò)頂點(diǎn)緩沖對(duì)象(Vertex Buffer Objects, VBO)管理這塊內(nèi)存。而VBO需要調(diào)用函數(shù)glGenBuffers()來(lái)生成。glGenBuffers的作用是在顯存中分配一塊緩沖區(qū),并返回一個(gè)唯一的標(biāo)識(shí)符。這個(gè)標(biāo)識(shí)符在OpenGL上下文中是唯一的,當(dāng)不再使用它時(shí),應(yīng)調(diào)用函數(shù)glDeleteBuffers()釋放相應(yīng)的資源。

n是要生成的VBO的數(shù)量,buffers是一個(gè)數(shù)組,用于接收生成的VBO的標(biāo)識(shí)符。

調(diào)用glGenBuffers

OpenGL中有很多用于綁定緩沖數(shù)據(jù)的緩沖對(duì)象類(lèi)型,其中用于綁定頂點(diǎn)數(shù)據(jù)的是GL_ARRAY_BUFFER。OpenGL允許同時(shí)綁定多個(gè)緩沖,只要它們是不同的緩沖類(lèi)型。綁定緩沖使用函數(shù)glBindBuffer()。

我們可以把剛剛創(chuàng)建的VBO綁定到對(duì)應(yīng)的類(lèi)型上:

調(diào)用glBindBuffer后,在對(duì)應(yīng)目標(biāo)(GL_ARRAY_BUFFER)上的所有操作都將影響到當(dāng)前綁定的緩沖對(duì)象(VBO)。

注意:OpenGL是一個(gè)狀態(tài)機(jī),因此一旦將緩沖對(duì)象綁定到目標(biāo)上,除非顯式綁定其他緩沖對(duì)象或者解綁,該緩沖對(duì)象會(huì)一直保持綁定狀態(tài),即使在不同的繪制調(diào)用中也有效。

接下來(lái)我們調(diào)用函數(shù)glBufferData(),用來(lái)把用戶(hù)定義的數(shù)據(jù)復(fù)制到當(dāng)前綁定緩沖。

它的第一個(gè)參數(shù)是緩沖對(duì)象類(lèi)型,第二個(gè)指定傳輸數(shù)據(jù)的大小(以字節(jié)為單位),第三個(gè)是實(shí)際發(fā)送的數(shù)據(jù),第四個(gè)指定緩沖區(qū)的使用方式,例如GL_STATIC_DRAW表示緩沖區(qū)將被寫(xiě)入一次,但要被繪制多次。

我們把之前創(chuàng)建的頂點(diǎn)數(shù)據(jù)傳入到緩沖中:

至此我們已經(jīng)把頂點(diǎn)數(shù)據(jù)儲(chǔ)存在了顯存中。

渲染的開(kāi)始的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
礼泉县| 城市| 谷城县| 廊坊市| 读书| 伊川县| 仙游县| 阜南县| 土默特右旗| 苍溪县| 筠连县| 谷城县| 鹤庆县| 邵阳县| 阿巴嘎旗| 临沧市| 汝南县| 泽州县| 呈贡县| 利津县| 阿克| 内乡县| 清河县| 凤庆县| 镇坪县| 永丰县| 观塘区| 上虞市| 林周县| 黑河市| 饶平县| 维西| 宁海县| 兴业县| 宜兰县| 公主岭市| 射洪县| 齐齐哈尔市| 贡嘎县| 香港| 乐山市|