本站小編為你精心準(zhǔn)備了虛擬倉(cāng)庫(kù)系統(tǒng)參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
1虛擬現(xiàn)實(shí)技術(shù)及其相關(guān)技術(shù)簡(jiǎn)介
隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,虛擬現(xiàn)實(shí)與人們的日常生活13益密切,已成為當(dāng)今計(jì)算機(jī)界廣泛關(guān)注的一個(gè)熱點(diǎn)。虛擬現(xiàn)實(shí)技術(shù)是一項(xiàng)涉及計(jì)算機(jī)圖形學(xué)、人機(jī)交互、人工智能等學(xué)科的綜合技術(shù),它的目的是用計(jì)算機(jī)來生成一個(gè)逼真的三維感覺世界,給觀眾以如同真實(shí)世界的體驗(yàn)。利用這一技術(shù),我們可以足不出戶游覽風(fēng)景勝地,可以漫游虛擬博物館欣賞文物,可以游覽虛擬校園欣賞校園景致等。
Delphi是全新的可視化編程環(huán)境,采用了彈性可重復(fù)利用的完整的面向?qū)ο蟪绦蛘Z(yǔ)言(Object—OrientedLanguage),是當(dāng)今世界上最快的編輯器和最為領(lǐng)先的數(shù)據(jù)庫(kù)技術(shù)。Delphi不但為OpenGL渲染函數(shù)的調(diào)用提供了一個(gè)高性能的繼承化開發(fā)環(huán)境IDE(IntegratedDevelopmentEnvironment).而且通過ADO方式連接SQLServer2000數(shù)據(jù)庫(kù)作為后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)調(diào)用。
MicrosoftSQLServer是一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),可應(yīng)用于各種專業(yè)組織及專業(yè)數(shù)據(jù)庫(kù)和政府用開發(fā)環(huán)境巾。SQLServer2000在本軟件中是作為后臺(tái)數(shù)據(jù)庫(kù)存放貨物倉(cāng)庫(kù)的各種規(guī)格參數(shù)以備調(diào)用,Delphi是通過ADO(ActiveXDataObjects)方式與數(shù)據(jù)庫(kù)進(jìn)行連接的,這種連接方式易于使用、高速度、低內(nèi)存支出和占用磁盤空間較少。
OpenGL是OpenGraphicsLibrary的縮寫,它是SG1公司開發(fā)的一套高性能的圖形處理系統(tǒng),是圖形硬件的軟件接口,意為開放的圖形庫(kù)。OpenGL不是編程語(yǔ)言,它是在Delphi平臺(tái)上的一組繪圖命令的AP1集合。基于OpenGL的三維可視化具有建模方便、實(shí)時(shí)的三維可視化和高度真實(shí)感顯示的優(yōu)越性。
2程序的實(shí)現(xiàn)
2.1設(shè)計(jì)思想
虛擬倉(cāng)庫(kù)系統(tǒng)以Delphi7.0為程序設(shè)計(jì)平臺(tái),以O(shè)penGL函數(shù)庫(kù)為工具進(jìn)行圖像渲染,通過ADO方式連接SQLServer2000數(shù)據(jù)庫(kù)作為后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行倉(cāng)庫(kù)規(guī)格參數(shù)的動(dòng)態(tài)調(diào)用,在一個(gè)三維可視化的空問中進(jìn)行貨物倉(cāng)庫(kù)的立體模擬,用戶可以通過操作鍵盤和鼠標(biāo)以第一視角在這個(gè)場(chǎng)景中漫游,還可以查看每垛貨物箱的各種規(guī)格參數(shù)。
2.2體系結(jié)構(gòu)
本系統(tǒng)在結(jié)構(gòu)上可分為3個(gè)模塊:Delphi平臺(tái)模塊、數(shù)據(jù)庫(kù)調(diào)用模塊、OpenGL實(shí)現(xiàn)模塊。其中OpenGL實(shí)現(xiàn)模塊又可分為5個(gè)子模塊:貨物倉(cāng)庫(kù)庫(kù)體渲染子模塊,貨物箱的渲染與紋理貼圖子模塊,燈管的渲染與光照、材質(zhì)的處理子模塊,貨物箱規(guī)格參數(shù)的中文輸出子模塊,鼠標(biāo)和鍵盤響應(yīng)(漫游實(shí)現(xiàn))子模塊。虛擬倉(cāng)庫(kù)系統(tǒng)的工作流程見圖1。
2.3ADO連接
系統(tǒng)是通過ADO(ActiveXDataObjects)方式與SQLServer2000數(shù)據(jù)庫(kù)進(jìn)行連接的,主要用到Delphi的ADO組件頁(yè)的ADOConnection組件和ADOQuery組件。我們通過ADOConnection組件連接數(shù)據(jù)庫(kù),通過ADOQuery組件進(jìn)行SQL編程來調(diào)用數(shù)據(jù)庫(kù)巾的關(guān)于貨物倉(cāng)庫(kù)的各種參數(shù)。
我們用下面的語(yǔ)句調(diào)用貨物倉(cāng)庫(kù)的參數(shù)存放到變量a中,其中a是用HuowuStorage定義的記錄類型。
a[i].name:=DataModule1.ADOQuery1.fieldByName(‘貨物名稱’).a(chǎn)sString;a[i].boxuint:=DataModule1.ADOQuery1.fieldByName(‘單箱發(fā)數(shù)’).a(chǎn)slnteger;IdI.]_boxwidth:=DataModule1.ADOQuery1.fieldByName(‘包裝箱寬’).a(chǎn)slnteger;a[j].boxheight:=DataModule1.ADOQuery1fieldByName(‘包裝箱高’).a(chǎn)slnteger;a[j].boxleng【b:=DataModule1.ADOQueryI.fieldByName(‘包裝箱長(zhǎng)’).a(chǎn)slnteger。
2.4三維模型的構(gòu)建
倉(cāng)庫(kù)庫(kù)體是由若干個(gè)四邊形組成的,包括墻壁、頂部、地板和若干標(biāo)準(zhǔn)線。倉(cāng)庫(kù)的頂部切面是折線梯形,是由一個(gè)個(gè)四邊形疊上去的。以下是繪制庫(kù)體頂部最上端部分的程序段。
glBegin(GL_QUADS):
glNormal3f(O.0,一1.0,0.O);,般置法線方向glTexCoord2f(0,O);,/紋理坐標(biāo)左下
glVertex3f(一sw/8,sh+sh,一(i-1)*sYscale);,,左前glTexCoord2f(1,0):,/,紋理坐標(biāo)右下
glVertex3f(一sw/8,sh+sh,一i*sYseale)://右前glTexCoord2f(1,1)://紋理坐標(biāo)右上
glVertex3f(sw/8,sh+sh,一i*sl/scale);//右后glTexCoord2f(0,1);,,紋理坐標(biāo)左上
glVertex3f(sw/8,sh+sh,-(i-1)sl/scale);//左后glEnd();
再進(jìn)行透視投影:gluPerspective(45.0,Width/Height,1,10000.0)接著我們進(jìn)行貨物箱的設(shè)置,每個(gè)貨物箱是由6個(gè)四邊形組成的,要對(duì)每個(gè)四邊形進(jìn)行紋理貼圖。當(dāng)然在渲染每一垛貨物箱時(shí),隱藏在里面的那些表面就不用渲染了,這樣可以節(jié)省很多時(shí)間,提高效率。
由于要實(shí)現(xiàn)每垛貨物箱的精確數(shù)量,所以使用多重FOR循環(huán)來進(jìn)行渲染。先繪制整層的貨物箱,再繪制一次剩余后整行的貨物箱,最后再繪制二次剩余的幾個(gè)貨物箱。
為了便于說明問題,我們舉個(gè)簡(jiǎn)單的例子:若有一垛的箱子數(shù)量為238個(gè),箱子的長(zhǎng)寬高分別為4,8,4(簡(jiǎn)化后),根據(jù)倉(cāng)庫(kù)的參數(shù)設(shè)置可以推算出這一垛每列箱子數(shù)為9個(gè),共有整層6層.余下22個(gè)在第7層,在該層上又有整2行,一次剩余標(biāo)志為l,最后還剩4個(gè)貨物箱在第7層的第3行,二次剩余標(biāo)志為l。
2.5漫游的實(shí)現(xiàn)
倉(cāng)庫(kù)漫游的實(shí)現(xiàn)是通過鼠標(biāo)和鍵盤的響應(yīng)來改變相應(yīng)的參數(shù),進(jìn)行視圖模型矩陣轉(zhuǎn)換,通過坐標(biāo)系的變換來調(diào)整觀察點(diǎn)的位置或是所渲染模型的位置。可利用下面的函數(shù)來實(shí)現(xiàn)。
glRotate(’l’ilt,1,0,0);//圍繞軸順時(shí)針旋轉(zhuǎn)Tilt度
glRotate(Heading,0,1,0);//圍繞y軸順時(shí)針旋轉(zhuǎn)
Heading度glTranslatef(,一0.5+HeadMovement,Z);/船軸正方向前進(jìn)(X)單位長(zhǎng)度,沿y軸正方向前進(jìn)(~0.5+HeadMovement)單位長(zhǎng)度,沿z軸正方向前進(jìn)(z)單位長(zhǎng)度。漫游實(shí)現(xiàn)的基本原理見圖2。
3結(jié)語(yǔ)
本文利用OpenGL強(qiáng)大的圖形功能在貨物倉(cāng)庫(kù)模擬方面進(jìn)行了有益嘗試,在實(shí)踐中取得了很好的效果,通過鼠標(biāo)鍵盤進(jìn)行人機(jī)交互,最終實(shí)現(xiàn)了貨物倉(cāng)庫(kù)的動(dòng)態(tài)可視化。虛擬現(xiàn)實(shí)技術(shù)的研究和應(yīng)用具有極其廣闊的前景,在某種意義上說它將改變?nèi)藗兊乃季S和生活方式,給人類世界帶來難以想象的變化。