最新虛擬現(xiàn)實(shí)的科技論文2500字(2)
最新虛擬現(xiàn)實(shí)的科技論文2500字
最新虛擬現(xiàn)實(shí)的科技論文2500字篇二
淺析虛擬現(xiàn)實(shí)建模的實(shí)現(xiàn)
摘要:虛擬現(xiàn)實(shí)技術(shù)是目前發(fā)展最快的一項(xiàng)多學(xué)科綜合技術(shù),在軍事、教育、建筑設(shè)計等領(lǐng)域都有著廣泛的應(yīng)用。傳統(tǒng)的實(shí)現(xiàn)虛擬現(xiàn)實(shí)建模的方式有很多種,如OpenGL,VRML,Direct3D等,這些技術(shù)都各有其優(yōu)缺點(diǎn)。Java是目前最為流行的面向?qū)ο蟪绦蛟O(shè)計語言之一,具有開發(fā)簡便和平臺無關(guān)等特點(diǎn),文章介紹了Java中實(shí)現(xiàn)虛擬現(xiàn)實(shí)建模的兩種方法:Java3D和JOGL,并通過示例詳細(xì)闡述了其實(shí)現(xiàn)過程和原理。
關(guān)鍵詞:虛擬現(xiàn)實(shí);Java;Java3D;JOGL
隨著科技的發(fā)展和人類的進(jìn)步,虛擬現(xiàn)實(shí)技術(shù)(Virtual Reality,VR)已成為相關(guān)領(lǐng)域中繼多媒體技術(shù)、Internet網(wǎng)絡(luò)技術(shù)之后研究、開發(fā)與應(yīng)用的熱點(diǎn),也是目前發(fā)展最快的一項(xiàng)多學(xué)科綜合技術(shù)。它集中體現(xiàn)了計算機(jī)技術(shù)、計算機(jī)圖形學(xué)、傳感技術(shù)、人體工程學(xué)、人機(jī)交互理論等多個領(lǐng)域的最新成果。
Java是一種完全的面向?qū)ο蟪绦蛟O(shè)計語言,具有開發(fā)簡便和平臺無關(guān)等優(yōu)點(diǎn)。在Java中進(jìn)行三維圖形或虛擬現(xiàn)實(shí)開發(fā)主要有兩種方式:Java3D和JOGL。Java3D綜合了以上建模語言的優(yōu)點(diǎn),是Java語言中一個用于三維圖形開發(fā)的API,其低級API依賴于現(xiàn)有三維圖形系統(tǒng)如Direct3D,OpenGL,QuickDraw3D和XGL等,這樣就能充分利用系統(tǒng)的三維特性。同時,用Java3D開發(fā)的基于Web的小程序可以與Internet很好地集成而無需下載相關(guān)的插件。JOGL提供了一種將Java和OpenGL綁定的方法,這樣既能發(fā)揮java語言所固有的優(yōu)點(diǎn),又能利用OpenGL函數(shù)實(shí)現(xiàn)對圖形的底層操作控制,使得開發(fā)圖形應(yīng)用程序更為簡單靈活,本文將詳細(xì)介紹這兩種Java中的虛擬現(xiàn)實(shí)建模的方法。
一、Java3D概述
Java3D的構(gòu)造涉及的概念很多,下面重點(diǎn)介紹兩個最基本并且必不可少的概念:虛擬宇宙(Virtual Universe)和場景圖(Locale)。
(一)虛擬宇宙(Virtual Universe)
在Java3D中,虛擬宇宙被定義為結(jié)合一系列對象的三維空間。虛擬宇宙被用作最大的聚集體表現(xiàn)單位,同時也可以被看作一個數(shù)據(jù)庫。不管是在物理空間還是邏輯內(nèi)容,虛擬宇宙都可以很大。在大多數(shù)情況下,一個虛擬宇宙就可以滿足一個應(yīng)用程序的所有需求。
虛擬宇宙是各自獨(dú)立的個體,原因是在任何時候一個結(jié)點(diǎn)對象都不能在超過一個的虛擬宇宙中存在。同樣的,在一個虛擬宇宙中的任何結(jié)點(diǎn)對象也不能在其他的虛擬宇宙中可見或者與其他的對象結(jié)合。對于一個Java3D應(yīng)用程序,必須定義一個虛擬宇宙才可以在這個“宇宙”中顯示三維圖像。
(二)場景圖(Locale)
場景圖(Locale):Java3D的場景圖是指由Java3D API構(gòu)成的一幅圖形或圖像,它是由一個或多個Java3D API對象組成的,組成Java3D的場景圖的每個對象被稱為節(jié)點(diǎn)對象,這些葉對象構(gòu)成了場景圖的內(nèi)容。
一旦一個場景圖對象被創(chuàng)建,并與其他場景對象連接形成一個子圖,該子圖能夠全部附屬于一個虛擬世界。在把一個子圖放到虛擬世界之前,整個的子圖能夠編譯成為一個優(yōu)化的內(nèi)部格式。所有場景圖對象的一個重要特征是:他們只能夠在一個場景圖的創(chuàng)建期間被訪問或修改,特殊允許的情況除外。用戶創(chuàng)建一個或更多場景子圖,并把它們放進(jìn)一個虛擬的世界,同時包括至少一個觀察平臺對象,而場景圖就是附加于這個觀察平臺。當(dāng)一個包含場景圖的觀察對象被附加于一個虛擬宇宙之后,Java3D的渲染循環(huán)就開始工作。這樣,場景就會和它的觀察對象一起被繪制在畫布上。在Java3D節(jié)點(diǎn)之間的單獨(dú)連接總是表示一個直接的關(guān)系:從父系到子系。Java3D限制場景圖不可以包含循環(huán),因此,一個Java3D場景圖是一個直接的非循環(huán)圖形(Directed acyclic graph)。從上述內(nèi)容不難看出,當(dāng)使用Java3D API編寫三維圖形、圖像應(yīng)用程序時,其重點(diǎn)應(yīng)當(dāng)集中在構(gòu)造場景中的節(jié)點(diǎn)內(nèi)容上,即在三維畫布上創(chuàng)建幾何形體、描述幾何形體的外觀屬性以及場景的光源和形體的行為等。
(三)Java3D性能分析
Java3D程序創(chuàng)建出來的場景圖可以直接被渲染,但是這樣做效率并不高,每一個場景圖內(nèi)建的適應(yīng)性使每個場景的執(zhí)行效率不是最優(yōu)的,但是還有更有效的方法提高渲染的效率。Java3D內(nèi)部有一套虛擬世界表示法和轉(zhuǎn)換方法。有兩種方法可以使Java3D系統(tǒng)轉(zhuǎn)化到內(nèi)部表示法。一種是編譯每個分支子圖。另一種方法是將分支圖插入到虛擬世界以使它處于激活狀態(tài)。
一旦分支圖被激活或編譯,Java3D渲染系統(tǒng)就會將分支圖轉(zhuǎn)化為更有效的內(nèi)部表示法,這種轉(zhuǎn)化,最重要的就是提高了渲染的性能。同時這種轉(zhuǎn)化還有其他效果,一個效果就是固定變化或者其他對象的值,只要程序不提供改變值的能力,那么程序在被激活或就不再具有改變場景中對象值的能力。
二、Java與OpenGL的綁定(JOGL)
JOGL是Sun于2003年發(fā)布的對于OpenGL的Java類綁定,它能夠完全訪問OpenGL的函數(shù),因此相比于Java3D更為靈活,可以進(jìn)行一些更為靠近底層的圖形開發(fā)和應(yīng)用,并且很容易同Java的圖形用戶界面開發(fā)包AWT和Swing結(jié)合在一起,使得開發(fā)應(yīng)用程序更為便利。
JDK6.0中JOGL已經(jīng)作為標(biāo)準(zhǔn)開發(fā)包正式發(fā)布,之前如果想使用JOGL,必需要得到j(luò)ogl、jar以及附帶的本機(jī)代碼。不同的操作系統(tǒng)有所區(qū)別,首先找到你的操作系統(tǒng)所對應(yīng)的包,并進(jìn)行安裝。net.java.games.jogl是JOGL中最重要的一個包,主要包含以下幾個類GLDrawable、GLCanvas、GLJpanel、GLCapabilities、GLDrawableFactory,這些是基本的圖形接口。下面的代碼演示如何用JOGL畫出一個紅色的點(diǎn)。
import java.awt.*;
import net.java.games.jogl.*;
public class Point extends Frame implements GLEventListener {
static int HEIGHT= 400,WIDTH= 400;
static GLCanvas canvas;
public Point( ) {
GLCapabilities capabilities=new GLCapabilities( );
canvas=GLDrawableFactory.getFactory().createGLCanvas(capabilities);
canvas.addGLEventListener(this);
add(canvas, BorderLayout.CENTER);
gl = canvas.getGL( );
}
public static void main(String[ ] args) {
Point frame=new Point();
frame.setSize(WIDTH, HEIGHT);
}
public void init(GLDrawable drawable) {
gl.glColor3f(1.0f, 0.0f, 0.0f);
}
public void reshape(GLDrawable drawable, int x, int y, int width, int height) {
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity( );
gl.glOrtho(0, width, 0, height, -1.0, 1.0);
}
public void display(GLDrawable drawable) {
gl.glBegin(GL.GL_POINTS);
gl.glVertex2i(WIDTH/2, HEIGHT/2);
gl.glEnd( );
}
public void displayChanged(GLDrawable drawable, Boolean modeChanged, Boolean
deviceChanged) { }
}
其中最主要的代碼有三行:
GLCapabilities capabilities=new GLCapabilities( );
canvas=GLDrawableFactory.getFactory().createGLCanvas(capabilities);
canvas.addGLEventListener(this);
首先,GLCapabilities capabilities=new GLCapabilities( );決定了JOGL庫和JVM可以使用哪些OpenGL/圖形特色。接著用GLDrawableFactory的createGLCanvas()方法來創(chuàng)建GLCanvas,再用createGLJpanel()方法創(chuàng)建GLJPanel。最后往GLCanvas上加GLEventListener,GLEventListener實(shí)現(xiàn)了GLEventListener接口,它負(fù)責(zé)當(dāng)接到GLDrawable或GLCanvas的調(diào)用時,所需要完成的所有繪圖工作。它定義了四個方法:第一次初始化OpenGL上下文時,系統(tǒng)會調(diào)用init()方法,這個方法主要作一些一次性的初始化工作,比如這里將系統(tǒng)前景色設(shè)置為紅色。當(dāng)用戶改變窗口大小并因此而改變canvas大小時將調(diào)用reshape()方法。監(jiān)聽器還會向這個方法傳送canvas的坐標(biāo)和大小參數(shù)。每當(dāng)reshape()被調(diào)用時,display()也會被調(diào)用,用來執(zhí)行OpenGL渲染操作。最后,當(dāng)顯示模式或顯示硬件改變時將調(diào)用displayChanged()方法。
三、總結(jié)
目前,世界上越來越多的大學(xué)已經(jīng)由講授C語言或者C++轉(zhuǎn)向Java語言。2003年,George Mason大學(xué)計算機(jī)學(xué)院開始將Java語言作為計算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生的基本程序設(shè)計語言來講授,而將C或C++作為選修。這意味著未來將會有越來越多的人使用Java語言來開發(fā)應(yīng)用程序。傳統(tǒng)的三維圖形應(yīng)用程序開發(fā),特別是涉及復(fù)雜的交互控制的應(yīng)用只有一些高手或?qū)I(yè)人員才能完成。Java3D和JOGL則讓初學(xué)者也能很容易的開發(fā)出交互式的圖形應(yīng)用程序,即便是一些復(fù)雜的應(yīng)用程序的構(gòu)建難度也大大降低。
參考文獻(xiàn):
1、曾建超,俞志和.虛擬現(xiàn)實(shí)技術(shù)及其應(yīng)用[M].清華大學(xué)出版社,1996.
2、Joshua Eddings.How Virtual Reality Works(中文譯本)[M].電子工業(yè)出版社,1994.
3、Java 3D Tutorial[EB/OL].
4、H Sowizral, K Rushforth,M Deering. The Java3D API Specification[C].2ndED.New York:Addison Wesley,2000.
5、J.X.Chen,Guide to Graphics Software Tools,SpingerVeriag,2002.
6、Zhigen Xu,Yusong,Yan,Jim X.Chen.OpenGL Programming in Java.
7、Henry A. Sowizal Introduction Programming with Java 3D.University of California,1998.
8、Sun Microsoft.Inc.The Java 3D API Specification Version 1.5[Z].2006.
9、張杰.Java3D交互式三維圖形編程.人民郵電出版社,1999.
(作者單位:華南理工大學(xué)計算機(jī)科學(xué)與工程學(xué)院)
看了“最新虛擬現(xiàn)實(shí)的科技論文2500字”的人還看: