日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPGPU基础(二):GPGPU需要用到的OpenGL概念

發(fā)布時間:2023/12/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPGPU基础(二):GPGPU需要用到的OpenGL概念 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在計算機圖形學中,紋理映射是實現(xiàn)復雜表面效果的高效方法,即以較小的計算量就可以實現(xiàn)較為逼真的模芯效果。在GPGPU中,紋理映射也是一個至關重要的概念。由圖形API實現(xiàn)經(jīng)典GPGPU的原理可以總結為:用紋理映射實現(xiàn)的科學計算(computation by texturing)。

1.紋理映射的概念

在渲染對象過程中,最簡單的方式是給各個對象表面顯式地涂上各種顏色。但這樣顏色會非常單一。同時,讓設計者手動地給每個像素定義不同顏色顯然也不可能。于是,紋理映射就成為一個生成較高質量三維表面地高效地這種方案。

紋理映射的原理:首先,由應用程序生成頂點組成的三維模型。然后這些頂點被網(wǎng)格化或三角化,變成若干相連的平面。這是,可以選擇使用一些預定好的二維位圖,在定義好模型后,將這些位圖貼在對象表面。這個過程稱為紋理映射。映射,也就指的是通過空間中的頂點坐標與紋理坐標之間的函數(shù)關系,用紋理圖為頂點賦值。

2.幾何圖元

幾何圖元是組成人們熟知地三維模型地基本元素,如點、直線、三角形等,通常由一個頂點列表組成。為了標志頂點列表地起始和終止位置,需要使用函數(shù)glBegin()和glEnd()。glBegin()地形參是一個幾何圖元對象地名稱。

glBegin(GL_POLYGON); //GL_POLYGON 是多邊形圖元地標識。這里表示一個邊長為2的二維正方形 glVertex2f(-1.-, -1.0); glVertex2f(-1.0, 1.0); glVertex2f(1.0, 1.0); glVertext2f(1.0, -1.0); glEnd();

常用OpenGL幾何圖元類型

幾何圖元類型注釋
GL_POINTS單個頂點集????
GL_LINES?多組雙頂點線段
GL_POLYGON單個簡單填充凸多邊形
GL_TRIANGLES多組獨立填充三角形
GL_QUADS多組獨立填充四邊形
GL_LINE_STRIP不閉合折線
GL_LINE_LOOP閉合折線
GL_TRIANGLE_STRIP線性連續(xù)填充三角形串
GL_TRIANGLE_FAN扇形連續(xù)填充三角形串
GL_QUAD_STRIP連續(xù)填充四邊形串

同時如果我們給同一個圖元不同頂點指定了不同顏色,OpenGL默認對策是對圖元進行平滑著色,即根據(jù)頂點顏色對其他部分線性插值。紋理坐標也是每個頂點的屬性,可以使用函數(shù)glTexCoor()指定。

幾何圖元可以分為填充圖元和非填充圖元兩類。直線是非填充圖元,其不具備“內(nèi)部”。二維多邊形是一種填充圖元,其“內(nèi)部”可以定義。OpenGL中,填充圖元有三種方式,即頂點方式、邊線方式和填充方式。頂點方式是用頂點組成的點集來繪制;邊線方式是僅繪制多邊形的邊線,其“內(nèi)部”沒有定義。填充方式是對多邊形進行填充,此時邊線在填充時也是內(nèi)部的一部分。

3.位圖與流水線

位圖是另一種基本圖元,也稱為離散圖元。它是一個由向量組成的矩陣。向量的元素數(shù)就是位圖的通道數(shù),比如彩色位圖通常是RGB,或者加入透明通道為RGBA。

與幾何圖元一樣,位圖也是圖形應用程序可以生成的數(shù)據(jù)形式。同樣會進入圖像流水線。但是,位圖已經(jīng)是可以存儲在幀緩存里的二維離散圖元,它不用流經(jīng)頂點處理單元,而是從另一條并行的流水線流入,在片段處理階段和流過頂點處理單元的數(shù)據(jù)匯合。


OpenGL對像素的讀寫,具體有三種操作:

1.把像素塊從幀緩存讀到住存儲器中,對應OpenGL函數(shù)是glReadPixels()

2.把像素塊從主存儲器寫入光柵化器中,對應OpenGL函數(shù)是glDrawPixels()

3.把像素塊從幀緩存復制到光柵化器中,對應OpenGL函數(shù)是glCopyPixels()

基本流程如圖:


注意,像素塊在OpenGL中的存儲方式可能和在主存儲器中的不同,如像素中各分量的排列順序。如果想要將像素塊從幀緩存的一部分轉移到另一部分,就需要先讀出像素,然后在另一處寫入。可以使用glReadPixels和glDrawPixels,但頻繁在主機與設備間傳輸數(shù)據(jù)過于低效,推薦使用glCopyPixels。

4.紋理圖

可以將紋理圖看成一張顏色查找表,根據(jù)每個頂點的紋理坐標可以從紋理圖上查到該頂點的顏色。通常紋理圖和幀緩存中的位圖一樣,都是由離散的像素構成。為了區(qū)分,我們將紋理圖上的一個像素稱為紋理元。事實上,由于紋理坐標都是經(jīng)過插值和采樣計算得到的,所以在紋理圖中查找顏色并不是連三的。而是根據(jù)相鄰紋理元的顏色插值或最近鄰得到的。因此可以將紋理圖看成連續(xù)的數(shù)組,它的二維坐標都是在實數(shù)域內(nèi)得到定義的。

OpenGL中默認的紋理圖都是邊長為1的正方形。這樣避免了使用明確坐標,用戶就可以在不必知道紋理圖尺寸的情況下使用紋理。但對GPGPU編程卻產(chǎn)生了不便。如,需要知道一個長度為512的數(shù)組的第100個元素,用C語言查找只需要使用下標99即可,但OpenGL需要使用100.0/512.0=0.1953125.

OpenGL中設置紋理圖的函數(shù)為glTexImage2D(),一個指定4個分量、每個分量為1個字節(jié)的二維紋理圖:

#define nImageWidth 64 #define nImageHeight 64 static Glubyte ubImage[nImageHeight][nImageWidth][4]; //填充數(shù)組 glEnable(GL_TEXTURE_2D); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,nImageWidth,nImageHeigght,0,GL_RGBA,GL_UNSIGNED_BYTE, ubImage);

當不需要對整幅紋理圖進行操作時,可以使用函數(shù)glTexSubImage2D()來定義一幅子紋理圖。

當使用glTexImage2D時,OpenGL就會在顯卡上分配一塊紋理緩存,把紋理圖從內(nèi)存轉移到紋理緩存中。如果已經(jīng)調(diào)用過glTexImage2D,更新紋理圖最好使用glTexSubImage2D,這樣就不用在顯卡上重新分配存儲空間,如果改動較小也不用將整個紋理圖傳輸?shù)斤@卡上,以提高效率。這也是GPGPU的典型做法。

5.紋理坐標

將紋理圖映射到三維表面是通過為每個頂點定義紋理坐標實現(xiàn)的。與頂點坐標一樣,是一個四維向量[s,t,r,q].除第一個分量外(使用時,用戶至少需要使用一維紋理坐標,因而s一定由用戶設定),其他分量的默認值為:t=0,r=0,q=1。設置紋理坐標函數(shù)為glTexCoord()。

6.紋理參數(shù)

在紋理映射前,還需要對一些參數(shù)進行設置。

1.越界取值:當指定的紋理坐標值大于實際的取值范圍時,即超出紋理圖的邊界時,GL_TEXTURE_WRAP系列參數(shù)用來指定這種情況下,OpenGL采取的措施??偟膩碚f,OpenGL一般有兩種策略。一種是用鉗位算法(clamp)將坐標值限制在某個區(qū)間內(nèi),即大于該范圍的取值就鉗定在區(qū)間上限,小于時就鉗定在區(qū)間下限。另一種時在邊界以外重復邊界內(nèi)的取值。


2.放大/縮小紋理圖


7.映射參數(shù)

此外,還需要確定映射過程中紋理圖與表面的相互作用,即處理與表面已有顏色的相互關系。通過glTexEnv進行。

8.紋理對象

如果用戶同時使用多塊紋理,則頻繁使用glTexImage來加載過于低效。OpenGL提供了紋理對象來管理紋理,這樣多塊紋理可以在紋理緩存中并存。紋理緩存不足時,OpenGL會按照優(yōu)先級管理紋理,使加載紋理次數(shù)盡可能少。

首先,需要調(diào)用glGenTextures()來建立一個紋理對象。其會返回n個有效的整數(shù)紋理標識符。這些整數(shù)被保存在textureNames數(shù)組中。這些返回的紋理表示符都是目前OpenGL未被占用的,不一定是連續(xù)的整數(shù)。0是OpenGL預留的紋理標識符,不會被分配。分配到的紋理對象的標識符,只表示該標識符有效,而紋理暫時還是無效的。使用前,用戶需要將它與某種類型的紋理綁定起來glBindTexture()。同時相關程序結束后,可以使用glDeleteTextures()刪除。

9.紋理單元

紋理單元與多重紋理映射息息相關。在圖形任務中,有時需要將多塊紋理映射到同一表面,映射的結果是多重紋理融合的效果。OpenGl使用紋理單元來管理多重紋理映射中使用的不同紋理圖。一個紋理單元就是一個獨立的紋理,除了紋理圖本身外,它還保存了紋理坐標和紋理參數(shù)等一切使用該紋理需要的信息。同一紋理圖也可以被多個紋理單元使用。

多重紋理映射時,可以使用OpenGL常量GL_TEXTUREi來選擇使用哪個紋理單元,其中i是0到31的整數(shù)。

總結

以上是生活随笔為你收集整理的GPGPU基础(二):GPGPU需要用到的OpenGL概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情 亚洲 | av片一区二区三区 | www国产精品视频 | 97精品视频在线观看 | 国产丰满农村老妇女乱 | 中文字幕日本一区 | 手机在线免费观看av | 成人综合久久 | 亚洲天堂网在线观看视频 | 日韩欧美在线观看一区二区三区 | 九九视频网 | 开心色99| 99欧美精品 | 久久久久久色 | 成人黄色小视频在线观看 | 婷婷深爱 | 性久久久久 | 99热官网| 一级黄色a视频 | 欧美高清hd| 中字幕一区二区三区乱码 | 成人免费网站在线观看 | 中文字字幕在线观看 | 国产精品xxx视频 | 国产女主播一区二区 | 啪啪自拍视频 | 国产美女作爱全过程免费视频 | 久久在线视频 | 色哟哟网站入口 | 1000部啪啪 | 亚洲AV无码精品黑人黑人 | 午夜精品久久久久久久久久久 | 国产精品免费久久久 | 最新最全av网站 | 国产精欧美一区二区三区蓝颜男同 | 折磨小男生性器羞耻的故事 | 久久五月天婷婷 | 好吊妞精品视频 | 国产精品aaa| 欧美高清v | 亚洲欧美色图 | 亚洲清纯唯美 | 亚洲va韩国va欧美va | 69视频网 | 精品久久久久久久久久久国产字幕 | 91久精品| 中文字幕av有码 | 91精品黄色 | 日本涩涩视频 | 精品二区视频 | 91夫妻论坛 | 欧美aaaaaaa | 色污网站 | 超碰美女在线 | 丰满熟女人妻一区二区三 | 久热在线视频 | 影音先锋在线播放 | 日韩中文字幕在线观看视频 | 午夜理伦三级理论 | 丰满人妻一区二区三区精品高清 | 五月天久久久久久 | 美女被c出白浆 | 青青草国产一区二区三区 | h片免费网站 | 亚洲天堂日本 | www.xxx在线观看 | 国产亚洲一区二区三区在线观看 | 国产欧美一区二区三区在线看蜜臂 | 最新中文字幕在线观看 | a√在线视频 | 在线美女av | 男女激情网站 | 免费精品视频一区二区三区 | 毛片毛片| 久久疯狂做爰流白浆xx | 欧美日韩视频在线观看一区 | 深夜福利电影 | 久久亚洲精精品中文字幕早川悠里 | 992tv成人免费视频 | 中文字幕在线播出 | 亚洲666| 成人亚洲电影 | 日本伊人影院 | 日韩欧美亚洲天堂 | 国产不卡视频在线播放 | 亚洲精品福利视频 | 亚洲熟女乱色一区二区三区 | 草草影院av | 夜夜操女人 | 俄罗斯厕所偷拍 | av影库| 不卡日本 | 中国美女一级黄色片 | 欧美aa一级| 毛片毛片毛片毛片毛片毛片毛片 | 内射中出日韩无国产剧情 | 亚洲精品国产一区 | 亚洲福利视频一区二区三区 | av色资源|