• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    淺析OpenGL中的坐標(biāo)變換與簡單漫游系統(tǒng)的實(shí)現(xiàn)

    2014-04-29 00:00:00高超侯國超

    摘 要:本文介紹了OpenGL坐標(biāo)變換技術(shù),包括了OpenGL中使用全局坐標(biāo)系和局部坐標(biāo)系的變換區(qū)別。并介紹了一個(gè)簡單漫游系統(tǒng)實(shí)現(xiàn)的方法。

    關(guān)鍵詞:坐標(biāo)變換;場景漫游

    中圖分類號:TP391.7

    在三維繪圖蓬勃發(fā)展的過程中,計(jì)算機(jī)公司推出了大量的三維繪圖軟件包。其中SGI公司推出的OpenGL,作為一個(gè)性能優(yōu)越的圖形應(yīng)用程序設(shè)計(jì)界面(API)異軍突起,取得了很大的成就。它以高性能的交互式三維圖形建模能力和易于編程開發(fā),得到了Microsoft、IBM、DEC、Sun、HP等大公司的認(rèn)同。因此,OpenGL已經(jīng)成為一種三維圖形開發(fā)標(biāo)準(zhǔn),是從事三維圖形開發(fā)工作的必要工具。

    在現(xiàn)實(shí)世界中,觀察到的所有物體對象都具有三維特征。但是在計(jì)算機(jī)屏幕上只能表現(xiàn)二維圖像。本文主要介紹,我們需要什么樣的變換才能在二維屏幕上真實(shí)的反應(yīng)我們的三維世界,并介紹如何才能在我們建成的三維世界中自由的暢游。

    1 OpenGL中的坐標(biāo)變換

    OpenGL中生成場景的變換過程類似于相機(jī)拍照一般分為四個(gè)步驟:

    視點(diǎn)變換:確定視點(diǎn)的位置、方向和向上方向。相當(dāng)將相機(jī)固定在三角架上,并使之對準(zhǔn)場景。

    模型變換:指定模型的位置和朝向,可以對模型進(jìn)行平移、旋轉(zhuǎn)和縮放。等同于將要拍攝的場景位于取景框中合適的位置。

    在OpenGL中,視點(diǎn)變換與模型變換是相互關(guān)聯(lián)的。移動相機(jī)和沿反方向移動物體可以獲得相同的效果。因?yàn)橐朁c(diǎn)變換和模型變換之間的對稱性,分開考慮這兩種變換的效果是不合理的。我們一般將視點(diǎn)變換與模型變換綜合起來稱為模型視點(diǎn)變換。

    進(jìn)行模型視點(diǎn)變換時(shí)我們要先使用GL_MODEVIEW調(diào)用glMatrixMode函數(shù),說明下面改變的是模型視點(diǎn)矩陣??墒褂玫暮瘮?shù)有g(shù)lTranslate(平移)、glRotate(旋轉(zhuǎn))、glScale(縮放),對于視點(diǎn)變換實(shí)用庫函數(shù)還提供了更簡單實(shí)用gluLookAt()函數(shù)。

    投影變換:指定視野或視景體,確定那些物體在視野內(nèi)以及在視野內(nèi)的大小。相當(dāng)于選擇相機(jī)的鏡頭或調(diào)整放大倍數(shù)。另外還決定了物體如何投影到屏幕。其中OpenGL支持兩種基本的投影方式:一種是透視投影,它類似于我們看東西的方式,使得物體越遠(yuǎn)越??;另一種是正交投影,它將物體直接映射到屏幕上,而不影響它們的相對大小。進(jìn)行模型視點(diǎn)變換時(shí)我們要先使用GL_PROJCETION調(diào)用glMatrixMode函數(shù),說明下面改變的是投影矩陣。glFrustum定義了透視投影,glOrtho定義了正交投影的相關(guān)參數(shù)。相對應(yīng)的實(shí)用庫函數(shù)提供的gluPerective、gluOrtho2D函數(shù)更簡單一些。

    視口變換:它指出了場景將被映射到什么樣的屏幕區(qū)域中。它指定了圖像占據(jù)的計(jì)算機(jī)屏幕區(qū)域。所以說,視口變換定義了照片的大小與位置。同時(shí)視口變換還定義了視景體的取景深度。他們相對應(yīng)的函數(shù)分別是glViewport、glDepthRange。

    OpenGL中的變換環(huán)境可以分為兩種:

    (1)全局固定坐標(biāo)系。因?yàn)镺penGL中的變換是通過變換矩陣完成的,所以變換順序至關(guān)重要。例如對于一個(gè)初始位置在原點(diǎn)的物體來說,先繞Z軸旋轉(zhuǎn),再沿X軸平移;與先沿X軸平移再繞Z軸旋轉(zhuǎn)所得到的結(jié)果是不同的。如果在全局固定坐標(biāo)系中考慮問題,矩陣乘法直接作用于模型。

    在上述代碼中變換矩陣的依次為N、M、L,變換后的定點(diǎn)為NMLv,因此頂點(diǎn)變換為N(M(Lv))。矩陣乘法將以與指定順序相反的順序進(jìn)行。

    (2)移動局部坐標(biāo)系。將要變換的模型與一個(gè)局部坐標(biāo)系捆綁在一起,所有的變換將該坐標(biāo)系發(fā)生變化。使用這種方式時(shí),代碼中矩陣的順序?qū)⑹亲匀豁樞颉?/p>

    使用局部坐標(biāo)系就要使用矩陣堆棧的。在堆棧中,執(zhí)行當(dāng)前變換的矩陣是棧頂矩陣。當(dāng)執(zhí)行g(shù)lPushMatrix()復(fù)制當(dāng)前矩陣,加入到棧頂時(shí),在執(zhí)行g(shù)lPopMatrix()之前所有的模型創(chuàng)建及變換都要受其影響,即在glPushMatrix()建造的局部坐標(biāo)系中進(jìn)行。

    2 簡單漫游系統(tǒng)的開發(fā)

    在某些系統(tǒng)中僅僅建立起模型世界是不夠的,還要能夠讓觀察者可以隨意的改變自己的位置和視角,讓其對自己感興趣的物體更加仔細(xì)的觀察,這就需要一個(gè)場景漫游系統(tǒng)。漫游系統(tǒng)的開發(fā)主要是指在視點(diǎn)漫游系統(tǒng)的開發(fā),主要工作就是視點(diǎn)變換,理解漫游系統(tǒng)的簡單工作程式對理解三維系統(tǒng)中的位置變換是非常有幫助的。通常而言,它主要包括兩個(gè)方面的功能:

    2.1 通過鍵盤控制視點(diǎn)的移動。視點(diǎn)位置的變換比較簡單,我們分為兩個(gè)步驟完成。

    第一是完成左右平移,因?yàn)槲覀円曈X系統(tǒng)自身的調(diào)節(jié)在平時(shí)在觀察物體時(shí),它們通常都是直立在我們的視野中的。所以左右平移只在XZ平面上進(jìn)行。

    在上述代碼中m_vPosition代表視點(diǎn)的位置,m_vStrafe是一個(gè)標(biāo)準(zhǔn)化矢量,存儲了視點(diǎn)的左右方向。m_vView存儲的是視點(diǎn)的方向。其中上坡的情況可以交給碰撞監(jiān)測來處理。

    第二是完成前后平移,有時(shí)漫游系統(tǒng)為了方便觀察會允許視點(diǎn)可以在Y軸方向移動,即向空中爬升。所以前后移動要考慮到攝像機(jī)的當(dāng)前方向。

    獲取以上參數(shù)后可以使用視點(diǎn)變換函數(shù)gluLookAt()調(diào)用視點(diǎn)的位置,方向信息,這樣一個(gè)簡單的漫游系統(tǒng)就可以工作了。

    3 結(jié)束語

    計(jì)算機(jī)圖形學(xué)旨在生成三維物體的二維圖像,因?yàn)樵谄聊簧现荒芾L制二維圖像;然而,在決定在屏幕上繪制什么時(shí),必須在三維坐標(biāo)系下進(jìn)行思考。人們在創(chuàng)建三維圖形時(shí),常犯的錯(cuò)誤是,過早地考慮最終出現(xiàn)在二維屏幕上的圖像是什么樣的。因此,不要考慮需要繪制那些像素,而應(yīng)在三維空間中進(jìn)行想象;即在三維空間中創(chuàng)建模型,讓計(jì)算機(jī)來決定需要繪制哪些像素點(diǎn)。所以我們對三維世界的建立應(yīng)該更加注重自己對三維空間的想象和駕馭能力,這樣才能夠在三維空間的創(chuàng)建時(shí)顯的更加游刃有余。

    參考文獻(xiàn):

    [1]OpenGL體系結(jié)構(gòu)審核委員會OpenGL編程指南[M].北京:人民郵電出版社,2005,4.

    作者簡介:高超,男,工程師,研究方向:視景仿真。

    作者單位:91336部隊(duì),河北秦皇島 066326

    郧西县| 岢岚县| 商河县| 漳浦县| 双牌县| 巴彦淖尔市| 萨迦县| 察哈| 延边| 囊谦县| 西藏| 乌拉特前旗| 扎鲁特旗| 松江区| 海安县| 蒙阴县| 华阴市| 弥渡县| 泾阳县| 定西市| 石阡县| 贵定县| 泽普县| 榕江县| 涟源市| 平泉县| 平利县| 县级市| 永靖县| 上林县| 托克逊县| 合山市| 峨山| 潮安县| 城固县| 普兰店市| 项城市| 繁昌县| 亚东县| 五河县| 宝丰县|