青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

OpenGL工作流程 翻譯自藍(lán)寶書

OpenGL工作流程

通過(guò)上面的介紹,對(duì)OpenGL是有了一個(gè)總體的印象。下面來(lái)闡述在OpenGL中處理數(shù)據(jù)的三個(gè)階段和這些階段中OpenGL函數(shù)如何使用。
                                                               圖1
    
                                圖1詳細(xì)給出了OpenGL處理流水線(pipe line)的框圖。
    圖中左邊有三條豎向的寬箭頭,箭頭代表了幾何頂點(diǎn)(vertexs)和與幾何頂點(diǎn)有關(guān)的兩類原始數(shù)據(jù):顏色值和紋理坐標(biāo)。從圖中可以看出處理流程的三個(gè)階段,幾何頂點(diǎn)被組合為圖元(primitives),然后圖元被合成片元(fragments),最后片元被轉(zhuǎn)換為幀緩存中的象素?cái)?shù)據(jù)(pixels)。在下面的章節(jié)中將詳細(xì)討論這一過(guò)程。
圖 OpenGL工作流程(openGL blue book)
   
15.5.1 幾何頂點(diǎn)
這一節(jié)講解流程圖中對(duì)預(yù)頂點(diǎn)進(jìn)行處理(per-vertex)的相關(guān)OpenGL函數(shù),經(jīng)過(guò)這個(gè)處理后的幾何頂點(diǎn)便可以進(jìn)入OpenGL處理流程。
1)輸入數(shù)據(jù)
對(duì)OpenGL流水線必須提供如下的輸入數(shù)據(jù)類型
幾何頂點(diǎn)(Vertices)——幾何頂點(diǎn)描述了幾何物體的形狀。指定幾何頂點(diǎn)要用glVertex*()函數(shù),并將其放在glBegin()和glEnd()之間,可以創(chuàng)建點(diǎn)、線或者多邊形。可以用glRect*()描述一整個(gè)矩形。
邊界標(biāo)志(Edge flag)——默認(rèn)情況下所有多邊形的邊緣都是邊界。使用glEdgeFlag*()可以明確指定邊界。
當(dāng)前光柵化位置——使用glRastERPos*(),用來(lái)指定象素和位圖繪制操作的柵格坐標(biāo)。
當(dāng)前法線——幾何頂點(diǎn)的法向量決定了三維空間中某個(gè)面上一點(diǎn)的指向,從而影響了該點(diǎn)接收光線。使用glNormal*()來(lái)定義一個(gè)法向量。
當(dāng)前顏色——頂點(diǎn)的顏色,加上設(shè)置的光照條件,最終決定了光照顏色。RGB顏色用glColor*(),顏色索引模式用glIndex*()。
當(dāng)前紋理坐標(biāo)——用glTexCoord*()定義,紋理坐標(biāo)將紋理圖象的一個(gè)特殊位置與幾何頂點(diǎn)關(guān)聯(lián)。
當(dāng)調(diào)用glVerex*()時(shí),計(jì)算后的幾何頂點(diǎn)繼承了當(dāng)前邊界標(biāo)志、法線、顏色和紋理坐標(biāo)。因此,一旦定義了這些屬性,glEdgeFlag*(),glNormal*(),glColor*()和glTexCoord*()在glVertex*()前被調(diào)用。
2) 矩陣變換
在生成幀緩沖區(qū)中的圖象前,幾何頂點(diǎn)和法向量需要通過(guò)模型矩陣(modelview matrix)和投影矩陣(projection matrix)進(jìn)行矩陣變換。需要用到glMatrixMode(), glMultMatrix(), glRotate(),glTranslate()和glScale()等函數(shù)組合得到想要的變換。用glLoadMatrix() 和glLoadIdentity()可以指定單位矩陣。使用glPushMatrix() 和glPopMatrix()從各自堆棧中保存和取出模型矩陣和投影矩陣。
3)光照和顏色
除了定義顏色和法向量之外,還可以用glLight*() 和glLightModel*()設(shè)置想要的光照條件,用glMaterial*()設(shè)置想要的材質(zhì)屬性。用glShadeModel(),glFrontFace()和 glColorMaterial()控制光照的計(jì)算。
4) 生成紋理坐標(biāo)
除了精確設(shè)置紋理坐標(biāo)外,還可以用glTexGen*()自動(dòng)生成幾何頂點(diǎn)的紋理坐標(biāo)。在紋理坐標(biāo)設(shè)置或自動(dòng)生成后,需要進(jìn)行紋理矩陣變換。紋理矩陣的操作和上面其他矩陣變換的操作相同。
5) 圖元組裝
一旦這些計(jì)算都完成后,幾何頂點(diǎn)被組合為圖元(點(diǎn),線段或多邊形)還包括幾何頂點(diǎn)的相關(guān)邊界標(biāo)志、法線、顏色和紋理坐標(biāo)。
15.5.2 圖元
在下一個(gè)處理階段中,圖元被分幾步轉(zhuǎn)換為象素片元:圖元被適當(dāng)?shù)牟眉簦伾图y理數(shù)據(jù)也相應(yīng)作出必要的調(diào)整,相關(guān)的坐標(biāo)被轉(zhuǎn)換為窗口坐標(biāo)。最后,光柵化將裁剪好的圖元轉(zhuǎn)換為象素片元。
1) 裁剪
在裁剪時(shí)點(diǎn),線段和多邊形處理略微不同。對(duì)于點(diǎn),要么保留原始狀態(tài)(在裁剪體內(nèi)部),要么被裁掉(在裁剪體外部)。對(duì)于線段和多邊形來(lái)說(shuō),如果部分在裁剪體外部,則需要在裁剪點(diǎn)生成新的幾何頂點(diǎn)。對(duì)于多邊形,還需要在新增的頂點(diǎn)間增加完整的邊。不論裁剪了線段還是多邊形,都需要給新增幾何點(diǎn)賦予邊界標(biāo)志、法線、顏色和紋理坐標(biāo)信息。
裁剪過(guò)程時(shí)兩步:
a 應(yīng)用程序指定裁剪(Application-specific clipping),一旦組合圖元完成后,如果在程序中用glClipPlane()函數(shù)定義了任意的裁剪面,就進(jìn)行裁剪。
b 視景體裁剪(View volume clipping),隨后,圖元被投影矩陣投影(進(jìn)入裁剪坐標(biāo)系),被相應(yīng)的視景體裁剪。投影矩陣可以由glFrustum() 或者glOrtho()定義,投影矩陣的操作和上面其他矩陣變換的操作相同。
2) 轉(zhuǎn)換到窗口坐標(biāo)
裁剪坐標(biāo)在轉(zhuǎn)換為窗口坐標(biāo)之前,要除以規(guī)格化設(shè)備坐標(biāo)(normalized device coordinates)的w值進(jìn)行規(guī)范化。然后對(duì)這些規(guī)范化數(shù)據(jù)進(jìn)行視口變換(viewport)計(jì)算生成窗口坐標(biāo)。可以用glDepthRange()和glViewport()控制視口大小,決定屏幕上顯示圖象的區(qū)域。
3) 光柵化
光柵化是將一個(gè)圖元轉(zhuǎn)變?yōu)橐粋€(gè)二維圖象的過(guò)程。二維圖象上每個(gè)點(diǎn)都包含了顏色、深度和紋理數(shù)據(jù)。將該點(diǎn)和相關(guān)信息叫做一個(gè)片元(fragment)。在這個(gè)階段,對(duì)象素繪制和位圖進(jìn)行操作需要用到當(dāng)前柵格位置(用glRasterPos*()定義)。正如上面討論的,三種圖元的光柵化方法是不同的,另外,象素塊和位圖也需要光柵化。
a)圖元
采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函數(shù)可以選擇圖元的光柵化維數(shù)和模式。另外,還可以用glCullFace(), glFrontFace()和glPolygonMode()控制多邊形正反面不同的光柵化效果。
b)象素
有幾個(gè)函數(shù)實(shí)現(xiàn)象素保存和轉(zhuǎn)換。函數(shù)glPixelStore*()用于內(nèi)存中的象素是如何保存的。glPixelTransfer*() and glPixelMap*()用于象素在寫入幀緩沖區(qū)前是如何處理的。glDrawPixels()定義了一個(gè)象素矩形。用glPixelZoom()實(shí)現(xiàn)象素的縮放。
c)位圖
位圖是具有特定片元模式的0和1的矩形。每個(gè)片元有相同的相關(guān)數(shù)據(jù)。可以用glBitmap()定義。
d)紋理存儲(chǔ)
紋理貼圖是將指定的部分紋理圖象映射到每個(gè)圖元上。每個(gè)片元(fragment)具有的紋理坐標(biāo)屬性,該坐標(biāo)與紋理圖象坐標(biāo)對(duì)應(yīng),得到紋理圖象該位置的顏色值來(lái)修改片元的RGBA顏色,從而完成這個(gè)映射過(guò)程。用glTexImage2D()或glTexImage1D()來(lái)定義紋理圖象。glTexParameter*()和glTexEnv*()來(lái)控制紋理如何解釋和應(yīng)用到一個(gè)片元上。
e)霧
已經(jīng)光柵化的片元具有紋理貼圖修正后顏色,可以采用融合因子再融合霧顏色,該融合因子大小根據(jù)視點(diǎn)和片元間的距離來(lái)定。用glFog*()指定霧化顏色和融合因子。
15.5.3 片元
  OpenGL允許光柵化生成一個(gè)片元,只要該片元通過(guò)一系列檢測(cè)就可以修改幀緩沖區(qū)中對(duì)應(yīng)象素。如果它通過(guò)測(cè)試,片元數(shù)據(jù)可以直接替換幀緩沖區(qū)中的已有值,或者和已有值合并,這取決于設(shè)置的模式。
1)象素所有權(quán)(ownership)檢測(cè)
第一個(gè)測(cè)試是判斷在幀緩沖區(qū)中的象素所對(duì)應(yīng)的某個(gè)片元是否屬于當(dāng)前OpenGL上下文。如果屬于,片元進(jìn)行下一個(gè)測(cè)試。如果不屬于,窗口系統(tǒng)決定是否忽略該片元,或者是否進(jìn)行下一步片元操作。
2)裁剪檢測(cè)
用glScissor()函數(shù),可以定義一個(gè)任意屏幕校準(zhǔn)矩形,在該矩形外的片元將被忽略。
3)Alpha檢測(cè)
Alpha測(cè)試只能在RGBA模式下進(jìn)行,如果片元的alpha值超出一個(gè)固定參照值,片元將被忽略,這個(gè)比較函數(shù)可以用glAlphaFunc()實(shí)現(xiàn)并設(shè)定參考值。
4)模版檢測(cè)
當(dāng)模版緩沖區(qū)的值超出一個(gè)參照值,模版測(cè)試將有條件的忽略該片元。這個(gè)比較函數(shù)和固定值可以用glStencilFunc()實(shí)現(xiàn)。不論圖元通過(guò)或沒(méi)有通過(guò)模版測(cè)試,模版緩沖區(qū)中的值會(huì)根據(jù)glStencilOp()函數(shù)進(jìn)行修改。
5)深度檢測(cè)
當(dāng)深度緩沖區(qū)的值與參照值的比較失敗,深度測(cè)試忽略該片元。GlDepthFuc()用來(lái)執(zhí)行這個(gè)比較命令。如果模版啟用,深度比較的結(jié)果會(huì)影響模版緩沖區(qū)值的更新。
6)融合
融合合并了一個(gè)片元R、G、B和A值和存儲(chǔ)在幀緩沖區(qū)對(duì)應(yīng)位置的這些值。融合只能在RGBA模式下實(shí)現(xiàn),它的實(shí)現(xiàn)需要片元的alpha值和對(duì)應(yīng)當(dāng)前存儲(chǔ)象素,還需要RGB值。用glBendFun()控制,可以修改融合因子的源和目標(biāo)。
7)抖動(dòng)
如果啟動(dòng)抖動(dòng),片元的顏色或者顏色索引采用抖動(dòng)算法。這個(gè)算法只需要片元的顏色值和它的x和y坐標(biāo)。
8)邏輯操作
最后,在片元和幀緩沖區(qū)對(duì)應(yīng)值之間要進(jìn)行一個(gè)邏輯操作,結(jié)果將替換當(dāng)前幀緩沖區(qū)的值。用glLogicOp定義想要的邏輯操作。這個(gè)邏輯操作只能在顏色索引模式下運(yùn)行,而不能在RGBA模式運(yùn)行。
15.5.4 象素
   在OpenGL流水線的上個(gè)階段,片元轉(zhuǎn)換為幀緩沖區(qū)中的象素。幀緩沖區(qū)實(shí)際上是一組邏輯緩沖區(qū)——包括顏色緩沖區(qū)、深度緩沖區(qū)、模版緩沖區(qū)和累積緩沖區(qū)。顏色緩沖區(qū)包括左、前右、后左、后右和一些輔助緩存值(auxiliary buffers)。可以直接從中讀取或者復(fù)制。對(duì)于OpenGL不同上下文,這些緩沖區(qū)可能不全
1)幀緩沖區(qū)操作
用glDrawBuffer為繪圖選擇一個(gè)顏色緩沖區(qū)。另外在預(yù)片元化(per-fragment)操作后,可以用四個(gè)不同函數(shù)保留寫入這些邏輯緩沖區(qū)的操作,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()對(duì)累積緩沖區(qū)進(jìn)行操作。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().對(duì)不同緩沖區(qū)中指定相對(duì)應(yīng)的顏色值、顏色索引值、深度值、模板值和累積值。
2)讀取和復(fù)制象素
用glReadPixel()從幀緩沖區(qū)中把象素讀到內(nèi)存中,進(jìn)行各種操作,保存處理結(jié)果。另外,可以用glCopyPixel()從幀緩沖區(qū)中復(fù)制一塊象素到另一個(gè)幀混存。glReadBuffer()可以讀取和復(fù)制顏色緩沖區(qū)中的象素。

posted on 2007-04-07 22:19 楊粼波 閱讀(396) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美高清视频在线| 国产精品扒开腿做爽爽爽软件| 欧美一区二区视频观看视频| 欧美精品91| 亚洲国产精品成人精品| 久久国内精品视频| 亚洲亚洲精品三区日韩精品在线视频| 欧美高清在线一区| 亚洲激情一区二区三区| 免费在线观看精品| 久久久久久久网| 亚洲国产一区二区在线| 久久久久久一区| 一区二区三区在线高清| 久久精品国产精品亚洲| 亚洲欧美日韩视频一区| 国产精品亚洲视频| 在线观看一区视频| 久久国产精品一区二区三区| 日韩视频专区| 欧美日韩一区精品| 亚洲欧美第一页| 亚洲香蕉成视频在线观看| 国产精品黄页免费高清在线观看| 免费观看成人网| 亚洲国产精品日韩| 亚洲缚视频在线观看| 久久久久国色av免费看影院| 狠狠88综合久久久久综合网| 老司机精品久久| 乱码第一页成人| 最新国产の精品合集bt伙计| 亚洲国内自拍| 欧美午夜视频在线观看| 久久成人精品视频| 久久久久久久97| 日韩视频三区| 亚洲在线免费观看| 在线日韩欧美视频| 99在线|亚洲一区二区| 国产精品久久久久久久第一福利 | 久久婷婷久久| 亚洲区在线播放| 夜夜嗨av一区二区三区网站四季av| 国产精品国产自产拍高清av| 久久精品国产一区二区三区| 欧美成人69av| 欧美一区二区三区四区高清| 久久免费视频网站| 欧美日韩亚洲国产一区| 午夜精品在线观看| 免费不卡视频| 欧美一区二区三区免费在线看| 久久午夜色播影院免费高清| 亚洲视频香蕉人妖| 久久精品免费看| 亚洲一区国产精品| 猛干欧美女孩| 亚洲欧美日韩综合一区| 老司机精品视频一区二区三区| 亚洲小视频在线观看| 久久全球大尺度高清视频| 亚洲欧美日韩一区在线观看| 免费在线观看一区二区| 久久久久88色偷偷免费| 欧美视频一区二区| 亚洲国产精品成人久久综合一区| 国产精品视频| 亚洲精品中文在线| 尤物视频一区二区| 午夜精品久久久久久99热软件| 日韩一二三区视频| 久久久综合激的五月天| 午夜精品福利在线观看| 欧美日韩国产丝袜另类| 国产欧美日韩另类视频免费观看| 国产日韩在线一区| 久久久人成影片一区二区三区观看 | 正在播放亚洲一区| 亚洲精品少妇30p| 久久久久久噜噜噜久久久精品 | 久久久精品国产免费观看同学| 亚洲嫩草精品久久| 欧美日韩中文精品| 亚洲三级观看| 99riav1国产精品视频| 欧美 日韩 国产在线| 免播放器亚洲| 亚洲国产影院| 老司机aⅴ在线精品导航| 久久这里有精品15一区二区三区| 国产亚洲一区二区三区| 午夜精品久久久久久久久| 性色av一区二区三区| 国产精品蜜臀在线观看| 亚洲在线第一页| 欧美中文在线视频| 国产日韩欧美在线播放| 午夜视频在线观看一区二区三区 | 亚洲国产福利在线| 亚洲人www| 欧美激情国产日韩| 亚洲美女一区| 午夜激情久久久| 国产精品免费一区豆花| 亚洲欧美日韩视频一区| 久久久久国产免费免费| 精品不卡在线| 欧美肥婆bbw| 一本色道久久综合亚洲精品按摩| 亚洲一区日韩在线| 国产视频久久久久| 久久综合婷婷| 亚洲美女av黄| 欧美一区二区在线播放| 极品av少妇一区二区| 蜜桃视频一区| 日韩一区二区精品视频| 性欧美xxxx大乳国产app| 国产日韩欧美精品在线| 久久人体大胆视频| 亚洲三级免费观看| 久久精品国产亚洲一区二区三区 | 中国女人久久久| 久久国产精品免费一区| 亚洲福利视频一区二区| 亚洲激情另类| 亚洲欧美日本国产专区一区| 红桃视频欧美| 欧美三日本三级三级在线播放| 性感少妇一区| 亚洲第一在线综合在线| 亚洲免费一级电影| 亚洲国产精品ⅴa在线观看 | 久久精品夜夜夜夜久久| 亚洲国产第一| 国产麻豆综合| 欧美精品久久久久久久久老牛影院 | 欧美高清视频免费观看| 一区二区三区精品视频在线观看| 国产精品蜜臀在线观看| 久久午夜精品| 亚洲女人av| 亚洲第一在线视频| 久久成人精品一区二区三区| 亚洲伦理一区| 精品白丝av| 国产深夜精品福利| 欧美日韩一区二区视频在线| 久久美女艺术照精彩视频福利播放| 在线午夜精品自拍| 亚洲国产精品久久久久| 久久伊人亚洲| 欧美自拍偷拍午夜视频| 一本久道久久综合中文字幕| 狠狠色综合播放一区二区| 国产精品美女久久| 欧美日韩系列| 欧美乱妇高清无乱码| 狂野欧美激情性xxxx欧美| 亚洲欧美日韩精品久久久| 99精品热视频| 亚洲精选久久| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲第一精品福利| 久久久免费精品| 欧美一区二视频| 亚洲免费在线精品一区| 99热这里只有精品8| 亚洲乱码日产精品bd| 亚洲黄色片网站| 91久久国产综合久久| 亚洲国产一区在线| 亚洲第一页中文字幕| 伊大人香蕉综合8在线视| 国产亚洲人成a一在线v站| 国产欧美 在线欧美| 国产欧美日韩一区二区三区| 国产精品三级视频| 国产精品久久久久毛片大屁完整版 | 在线播放日韩欧美| 在线观看91精品国产入口| 国内免费精品永久在线视频| 国产日韩视频| 很黄很黄激情成人| 在线看无码的免费网站| 亚洲成色777777在线观看影院| 在线免费高清一区二区三区| 亚洲福利视频一区| 亚洲美女中出| 亚洲一区视频| 久久成人免费网| 久久夜色精品亚洲噜噜国产mv| 久久在线免费观看视频| 亚洲大胆av| 99国产精品久久久久久久成人热 | 欧美区二区三区| 国产精品第一区| 国产一区二区视频在线观看| 欧美日本在线视频|