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

牽著老婆滿街逛

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

OpenGL工作流程 翻譯自藍寶書

OpenGL工作流程

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美亚洲视频在线看网址| 欧美影片第一页| 香蕉久久夜色精品国产| 亚洲视频免费看| 国产欧美综合在线| 卡一卡二国产精品| 久久久久九九九| 影音先锋一区| 亚洲精品123区| 欧美日韩一区二| 久久激情网站| 欧美精品一区二区三区高清aⅴ| 91久久综合| 午夜精品理论片| 亚洲欧美综合| 久久国内精品视频| 国产欧美精品久久| 欧美激情一区| 国产午夜精品一区二区三区视频| 久久亚洲二区| 欧美日韩国产经典色站一区二区三区| 亚洲一区三区电影在线观看| 午夜精彩视频在线观看不卡 | 日韩一区二区精品视频| 99视频精品在线| 国内精品美女在线观看| 亚洲伦伦在线| 日韩一级免费| 欧美刺激性大交免费视频| 久久精品中文字幕免费mv| 欧美三级电影一区| 亚洲国产精品专区久久| 娇妻被交换粗又大又硬视频欧美| av成人老司机| 亚洲视频免费观看| 欧美精品在线极品| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲天堂免费观看| 欧美日韩国产免费| 亚洲另类在线视频| 国产精品99久久99久久久二8 | 国产日韩欧美一二三区| 亚洲精品一区二区三区樱花| 亚洲日本在线观看| 欧美久久视频| 亚洲一区二区视频| 久久精品一区二区| 亚洲国产老妈| 欧美日韩另类字幕中文| 亚洲特黄一级片| 久久夜色精品国产欧美乱| 亚洲国产精品尤物yw在线观看| 免费视频一区| 亚洲欧美日韩国产成人精品影院| 久久久久免费观看| 午夜一区不卡| 亚洲精品一二区| 欧美不卡一卡二卡免费版| 免费在线观看成人av| 亚洲三级影院| 亚洲欧美中文另类| 亚洲国产黄色片| 欧美性猛交99久久久久99按摩 | 一本大道久久a久久精品综合| 欧美性猛片xxxx免费看久爱 | 国产精品久久久久毛片大屁完整版| 性欧美办公室18xxxxhd| 亚洲免费高清| 美日韩精品视频免费看| 性色一区二区| 亚洲免费在线观看| 亚洲精品一区二区三区婷婷月| 亚洲一卡二卡三卡四卡五卡| 国产私拍一区| 国产免费一区二区三区香蕉精| 欧美日本高清一区| 欧美大胆人体视频| 裸体一区二区三区| 久久婷婷国产综合国色天香| 亚洲欧美日韩直播| 欧美一区二区三区另类| 欧美一区二区三区免费在线看 | 亚洲韩国精品一区| 欧美阿v一级看视频| 欧美成人久久| 亚洲国产日韩一区| 一区二区三区.www| 亚洲欧美亚洲| 久久久久高清| 欧美日韩国产免费| 国产日韩欧美综合| 在线观看亚洲| 亚洲午夜日本在线观看| 午夜性色一区二区三区免费视频| 亚洲伊人伊色伊影伊综合网| 欧美一区二区三区精品| 免费观看成人www动漫视频| 国产精品扒开腿爽爽爽视频| 欧美视频二区36p| 国产一区二区成人| 99这里只有精品| 老牛嫩草一区二区三区日本| 亚洲人精品午夜| 欧美一区二区免费视频| 欧美精品一区二区三区高清aⅴ| 国产精品日本| av成人老司机| 亚洲福利视频免费观看| 欧美在线播放一区二区| 亚洲三级国产| 久久久国产亚洲精品| 国产精品九九| 日韩午夜精品| 亚洲精品一区二区三| 欧美99在线视频观看| 一区二区视频免费完整版观看| 亚洲欧美日韩国产综合| 久久久久久国产精品mv| 亚洲午夜av| 欧美一区二区三区免费视频| 欧美日韩精品是欧美日韩精品| 在线观看一区视频| 久久五月激情| 久久蜜桃资源一区二区老牛| 国产主播精品| 欧美高清一区| 欧美色123| 久久影视精品| 欧美激情va永久在线播放| 亚洲精品久久久蜜桃| 最新日韩精品| 国产精品素人视频| 久久精品国产一区二区电影 | 欧美v亚洲v综合ⅴ国产v| 亚洲精品免费在线| 亚洲丁香婷深爱综合| 国产精品久久久久久久久借妻 | 日韩亚洲欧美一区| 中文欧美日韩| 亚洲国产精品久久久久婷婷884| 亚洲国产你懂的| 国产日本欧美一区二区| 欧美成人午夜视频| 国产精品免费网站| 欧美激情精品久久久六区热门| 国产精品日韩一区二区| 欧美激情影音先锋| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精品一区二区在线| 韩国一区二区在线观看| 夜夜嗨av一区二区三区网站四季av| 新67194成人永久网站| 日韩视频免费看| 久久综合免费视频影院| 久久久精品午夜少妇| 国产精品久久久久秋霞鲁丝| 亚洲国产欧美日韩| 亚洲国产99| 久久综合给合久久狠狠狠97色69| 欧美一级片一区| 国产精品美女久久| 亚洲午夜av电影| 性久久久久久久| 国产日韩欧美高清免费| 亚洲免费综合| 久久精品国产精品| 国产亚洲欧洲| 美女黄毛**国产精品啪啪| 亚洲二区三区四区| 亚洲午夜精品久久久久久app| 欧美精品一区二区三区蜜桃| 亚洲激情成人网| 午夜视频一区二区| 国产亚洲欧洲一区高清在线观看| 亚洲欧美视频在线| 免费在线成人| 亚洲一区二区三区四区中文 | 久久本道综合色狠狠五月| 久久人人97超碰精品888| 亚洲国产精品久久久久婷婷老年| 猛男gaygay欧美视频| 一本久久青青| 欧美大片在线观看一区二区| 欧美精品免费看| 亚洲欧美国内爽妇网| 好看的日韩视频| 欧美视频在线视频| 久热精品在线视频| 亚洲国产成人久久综合| 欧美在线一级va免费观看| 欧美日韩1区2区| 欧美一区二区在线| 日韩视频在线一区二区| 国产一区二区毛片| 国产伦一区二区三区色一情| 欧美91精品| 欧美99在线视频观看| 久久精品一区| 亚洲视频1区| 一本色道久久综合|