国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺議OpenGL中三維物體的顯示過(guò)程

2018-02-17 05:58李文高
信息記錄材料 2018年3期
關(guān)鍵詞:視景視點(diǎn)投影

楊 薇,李文高

(保山學(xué)院 信息學(xué)院 云南 保山 678000)

1 引言

生活的大自然中,我們看到的物體都是三維物體,但要將這些景物數(shù)字化傳到電腦上顯示,那么一切三維景物都是以二維平面圖像的形式顯示,在具體的顯示效果中,我們又要求物體能夠具備三維的視覺(jué)特性,因此在顯示三維物體時(shí),其過(guò)程是復(fù)雜的。OpenGL是目前圖形開(kāi)發(fā)的標(biāo)準(zhǔn),它的性能表現(xiàn)異常優(yōu)越,尤其在實(shí)現(xiàn)三維渲染、三維場(chǎng)景等方面有著非常逼真的效果。

要利用OpenGL來(lái)顯示三維物體,可大體分為以下幾個(gè)過(guò)程。

2 首先必須對(duì)三維物體進(jìn)行建模

在顯示三維圖形之前,要對(duì)三維場(chǎng)景建模,并對(duì)場(chǎng)景中的實(shí)物建立三維景物模型。如果我們想在OpenGL中完成基本的三維圖形基礎(chǔ)模型建立并不困難,強(qiáng)大的OpenGL軟件包中包含了大量的基礎(chǔ)圖元,除此以外輔助庫(kù)中增加了很多描述三維圖像人函數(shù)及圖元。這些函數(shù)為我們提供了基礎(chǔ)圖形的模型。因此我們現(xiàn)在來(lái)繪制基本的三維圖形就很容易,只需要掌握基礎(chǔ)的三維圖形圖元函數(shù),例如繪制球體可用glutWireSphere函數(shù)來(lái)完成,繪制圓錐體可以函數(shù)glutWireCone來(lái)完成,繪制8面體可用glutWireOctahedron函數(shù)來(lái)完成。

3 將建模三維物體轉(zhuǎn)換成世界坐標(biāo)系中的三維物體

隨著計(jì)算機(jī)圖形學(xué)的發(fā)展各種顯示三維圖像的技術(shù)不斷涌出,利用當(dāng)前的三維技術(shù),我們可以將大自然的景物再現(xiàn),在實(shí)現(xiàn)過(guò)程中主要利用三維形體來(lái)表示物體信息。具體的實(shí)現(xiàn)過(guò)程,我們通常用可視化技術(shù)來(lái)完成,設(shè)計(jì)師們可以在設(shè)計(jì)三維圖像時(shí)突破傳統(tǒng)思維盡情發(fā)揮自己的想象設(shè)計(jì)出更出眾的作品。機(jī)械工程師們可以利用三維技術(shù)直接設(shè)計(jì)三維機(jī)械零部件,不必在二維技術(shù)中糾結(jié)如何展現(xiàn)三維的特性。醫(yī)生利用三維彩超直接生存三維直觀(guān)的掃描圖像,這樣更精確的分析出病人的病灶。軍事指揮員則可以利用三維軟件生存各種復(fù)雜的三維實(shí)戰(zhàn)地圖,并在模擬的地圖中完成各種三維飛機(jī)、導(dǎo)彈、軍艦等指揮,并最終分析得出最佳作戰(zhàn)方案。

我們生活的大自然是一個(gè)三維的物體世界,為了能夠盡量準(zhǔn)確逼真的將大自然還原到電腦中,我們需要一個(gè)世界空間,該世界空間就是所有物體所在的三維空間, 在該空間中定義的坐標(biāo)系稱(chēng)為世界坐標(biāo)系,物體在三維空間中的運(yùn)動(dòng)及形變的過(guò)程稱(chēng)為世界變換。世界坐標(biāo)系是物體的全局坐標(biāo)系,各個(gè)物體的模型統(tǒng)一在這一坐標(biāo)系下,便于表達(dá)多個(gè)物體的顯示。

將模型轉(zhuǎn)換成三維世界中的物體,就需要進(jìn)行模型變換。所謂 “模型變換”,指的是從模型坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換。

4 觀(guān)察變換

真實(shí)世界里所有物體都是三維的,我們要想將世界坐標(biāo)系中的三維物體轉(zhuǎn)換到二維平面上,需要經(jīng)過(guò)觀(guān)察變換來(lái)完成。

要獲得三維世界坐標(biāo)系場(chǎng)景的顯示,必須先建立觀(guān)察用的坐標(biāo)系。然后將對(duì)象描述轉(zhuǎn)換到觀(guān)察坐標(biāo)系中來(lái)。這一過(guò)程我們通常稱(chēng)為視點(diǎn)變換。為了描述視點(diǎn)變換,我們引入了一個(gè)概念即照相機(jī),在常規(guī)拍照時(shí),我們常常選擇好景點(diǎn)后開(kāi)始支好三腳架,并將照相機(jī)放在三腳架上面,此時(shí)將照相機(jī)對(duì)準(zhǔn)三維景物。通過(guò)不斷的調(diào)節(jié)視點(diǎn),將景物最好的呈現(xiàn)在相機(jī)上,該過(guò)程叫視點(diǎn)變換。默認(rèn)情況下,視點(diǎn)位置即相機(jī)所在位置為世界坐標(biāo)中的原點(diǎn),并且規(guī)定反Z軸為相機(jī)的初始方向,在這種情況剛好,剛好相機(jī)與物體是重疊的。

函數(shù)gluLookAt是OpenGL實(shí)用庫(kù)中提供的視點(diǎn)變換函數(shù),此函數(shù)共有三個(gè)變量,每個(gè)變量表示視點(diǎn)的位置、相機(jī)瞄準(zhǔn)方向的參考點(diǎn)以及相機(jī)的向上方向。通過(guò)調(diào)用這個(gè)函數(shù)之后,就設(shè)定好了視點(diǎn)的位置了。

5 投影變換

在相機(jī)和物體都放好后,我們要不斷的調(diào)整相機(jī)焦距及相機(jī)鏡頭位置,使景物以最美最恰當(dāng)?shù)慕嵌瘸尸F(xiàn)的相機(jī)內(nèi)。同樣,在OpenGL中為了讓三維物體以最真實(shí)的樣子投影在二維坐標(biāo)中,就需要投影變換。利用投影降低維數(shù)的方式,我們能夠讓物體以合適的位置、方向以及大小來(lái)顯示出來(lái)。投影變換的最終目的就是定義一個(gè)視景體,將所需要的景物框在該體內(nèi),視景體外的多余景物利用相關(guān)算法裁掉。投影包括透視投影和正視投影兩種。

(1)透視投影

透視投影是一種最常用的投影方式,該方式來(lái)自于我們的生活習(xí)慣及視覺(jué)常識(shí),在視點(diǎn)附近的景物大,隨著與視點(diǎn)的距離增加物體越來(lái)越小。該視景體猶如一個(gè)頂部和底部都被進(jìn)行切割過(guò)的棱椎。在動(dòng)畫(huà)設(shè)計(jì)、視覺(jué)仿真以及其它許多需要反映真實(shí)性物體時(shí)常用到透視投影。

在OpenGL中,透視投影主要通過(guò)兩個(gè)投影函數(shù)來(lái)完成,分別是glFrustum函數(shù)和gluPerspective函數(shù)。

函數(shù)glFrustum的作用是創(chuàng)建一個(gè)透視視景體。它的操作原理是先創(chuàng)建一個(gè)用與透視投影的矩陣,然后用這個(gè)矩陣乘以三維物體的各個(gè)頂點(diǎn)坐標(biāo)組成的矩陣。這個(gè)函數(shù)的參數(shù)只定義近裁剪平面的左下角點(diǎn)和右上角點(diǎn)的三維空間坐標(biāo),即(left,bottom,-near)和(right,top,-near);最后一個(gè)參數(shù)far是遠(yuǎn)裁剪平面的Z負(fù)值,其左下角點(diǎn)和右上角點(diǎn)空間坐標(biāo)由函數(shù)根據(jù)透視投影原理自動(dòng)生成。near和far表示離視點(diǎn)的遠(yuǎn)近,它們總為正值。

gluPerspective是一個(gè)透視函數(shù),其作用最終也是創(chuàng)建一個(gè)對(duì)稱(chēng)透視視景體。在使用該函數(shù)時(shí)應(yīng)注意,通過(guò)設(shè)定不同的參數(shù),我們可以定義視野在各個(gè)平面的角度、范圍值、投影平面寬度與高度的比率、遠(yuǎn)近裁剪面沿Z負(fù)軸到視點(diǎn)的距離。

(2)正射投影

該投影又稱(chēng)為平行投影。正射投影的原理是創(chuàng)建一個(gè)矩形平行管道視景體。正射投影的最大特點(diǎn)是物體的大小尺寸不依賴(lài)于物體與相機(jī)的距離。因此這種投影通常用在一些物體尺寸及角度投影后沒(méi)有變化的行業(yè),目的是讓施工或者制造時(shí)保持物體比例大小,如建筑藍(lán)圖繪制和計(jì)算機(jī)輔助設(shè)計(jì)等方面。

在OpenGL中使用正射投影主要通過(guò) glOrtho和gluOrtho2D兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)。

6 視口變換

生活中當(dāng)我們沖洗照片時(shí)需要指定照片的尺寸大小,這相當(dāng)于OpenGL中的視口變換。視口變換就是在電腦屏幕上指定二維圖像的大小,通過(guò)變換,我們可以指定景物在屏幕中的一個(gè)矩形區(qū)域,該區(qū)域規(guī)定了位置范圍,尺寸大小。

在計(jì)算機(jī)圖形學(xué)中,視口變換就是將物體應(yīng)用一系列的變換算法顯示于指定窗口的矩形區(qū)域內(nèi),這些算法包括幾何變換、投影變換和裁剪變換。在OpenGL中通常我們應(yīng)用glViewport(GLint x,GLint y,GLsizei width,GLsizei height);這個(gè)函數(shù)定義一個(gè)視口,該函數(shù)我們稱(chēng)之為視口函數(shù)。視口在屏幕中的初始位置由參數(shù)XY來(lái)指定,視口的寬度和高度由width和height來(lái)指定。在使用該函數(shù)時(shí)如果不指定參數(shù),系統(tǒng)會(huì)給我們一個(gè)默認(rèn)值,該默認(rèn)值為(0,0,winWidth,winHeight)。所有這些值都是以象素為單位,全為整型數(shù)。

經(jīng)過(guò)以上過(guò)程,一個(gè)三維圖形就可以完整的顯示在我們的屏幕內(nèi)。

[1]蔡士杰楊若瑜.計(jì)算機(jī)圖形學(xué)第四版.電子工業(yè)出版社,2016,2.

猜你喜歡
視景視點(diǎn)投影
虛擬現(xiàn)實(shí)技術(shù)在游戲設(shè)計(jì)中的應(yīng)用及研究
解變分不等式的一種二次投影算法
基于最大相關(guān)熵的簇稀疏仿射投影算法
找投影
找投影
環(huán)境視點(diǎn)
讓你每天一元錢(qián),物超所值——《今日視點(diǎn)—2014精萃》序
兩會(huì)視點(diǎn)
全回轉(zhuǎn)拖輪運(yùn)動(dòng)建模與視景仿真
基于Vortex與Vega Prime的車(chē)輛模擬器動(dòng)力學(xué)與視景仿真