

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 畢 業(yè) 論 文(設計)</p><p> 題 目: 基于Java 3D的復雜曲面創(chuàng)意設計</p><p><b> 摘 要</b></p><p> 三維復雜曲面造型技術主要是研究在計算機圖像系統(tǒng)的環(huán)境下對曲面的表示、設計、顯示和分析。在設計中,往往給出的型值點以及由此產生的樣條曲線有時不能滿足美觀上的
2、要求。該設計模型中采用了復雜曲線Bezier提出的參數曲線表示方法,即Bezier曲線。在此基礎上生成Bezier曲面,并進行拼接生成復雜曲面。</p><p> 本文主要著眼于3D曲面技術的實現與應用,并完成基于Java 3D實現復雜曲面造型,多曲面拼接,3D坐標變換技術和3D紋理映射。通過利用Bezier曲面的設計和拼接技術,實現鳥巢和五環(huán)的外形塑造和模擬運動效果。首先,定義了16*27個控制頂點,來控制2
3、7個Bezier曲面的形狀,將曲面拼接生成鳥巢和五環(huán)造型。 其中,在定義相鄰兩個曲面的控制頂點時,對曲面保持G0連續(xù),將相鄰兩個曲面進行拼接。然后,把所定義的其中19個Bezier曲面全部拼接,形成五環(huán),同時把8個Bezier曲面全部拼接,形成鳥巢。然后運用Alpha類和插值器PositionInterpolator類實現運動效果,最后生成3D場景。 </p><p> 本文重點研究三維復雜曲面造型,并完成基于
4、Java 3D技術實現鳥巢和五環(huán)外形設計。其目的是對三維復雜曲面造型的實現,本文編寫的Java 3D程序成功地通過了編譯和運行過程,最后顯示結果,成功的應用JAVA及JAVA 3D完成了鳥巢和五環(huán)的造型設計和展示效果。</p><p> 關鍵字:計算機圖形學;Java 3D;復雜曲面;Bezier曲面;鳥巢和五環(huán);</p><p><b> Abstract</b>
5、;</p><p> Three-dimensional complex surface modeling techniques is to study the environment in the computer graphics system that under the surface, design, display and analysis.In the design, are often give
6、n data points and the resulting spline curve sometimes can not meet the esthetic requirements.The design model using the parameters of complex curve Bezier curves proposed method, which Bezier curve.On this basis, genera
7、ted Bezier surfaces and complex surfaces generated by splicing.</p><p> This article focuses on the realization of 3D surface technology and applications, and complete based on Java 3D surface modeling of c
8、omplex, multi-surface blending, 3D technology and 3D coordinate transformation, texture mapping.Bezier surfaces through the use of the design and stitching technology, the shape of the nest and the rings to shape and mot
9、ion simulation results.First, the definition of 16 * 27 control points to control the shape of 27 Bezier surfaces, the blending surface generation</p><p> This paper focuses on complex three-dimensional sur
10、face modeling, and complete technology based on Java 3D shape of the nest and the rings design.The aim is to achieve three-dimensional complex surface modeling, this article written in Java 3D programs successfully compi
11、le and run through the process, and finally display the results, successful application of JAVA and JAVA 3D completed the nest and the design of rings and the display.</p><p> Keywords: computer graphics; J
12、ava 3D; complex surface; Bezier surface; </p><p> Bird's Nest and the rings</p><p><b> 目 錄</b></p><p><b> 1 緒論1</b></p><p> 1.1計算
13、機圖形技術的發(fā)展與應用1</p><p> 1.2 Java3D技術的簡介1</p><p> 1.3 Java3D與其他三維技術的比較2</p><p> 1.4 Java3D的場景圖結構3</p><p> 1.5 Java 3D的場景式組織4</p><p> 2 Java 3D基本圖形元素
14、5</p><p> 2.1Java 3D的虛擬場景空間設計5</p><p> 2.2 Java 3D的坐標系統(tǒng)7</p><p> 2.3 場景(Locale)7</p><p> 2.4 Java 3D的點、線繪制8</p><p> 2.4.1 GeometryArray類8</p&g
15、t;<p> 2.4.2點的生成10</p><p> 2.4.3線的生成10</p><p> 2.4.4 Java 3D程序Shape 3D類對象中幾何元素的定義11</p><p> 2.5 Appearance類12</p><p> 2.6 Material類13</p><p&
16、gt; 2.7 Light類13</p><p><b> 3 基本形體14</b></p><p> 3.1長方體Box類14</p><p> 3.2圓柱體Cylinder類14</p><p> 3.3圓錐體Cone類14</p><p> 3.4球體Sphere類1
17、4</p><p><b> 4 坐標變換14</b></p><p> 4.1Transform3D類14</p><p> 4.2 TransformGroup類與Transform3D類之間的關系15</p><p> 5 動畫編程基礎介紹16</p><p> 5.1鼠標
18、交互16</p><p> 5.2鍵盤交互16</p><p> 5.3 Alpha16</p><p> 5.4自定義行為17</p><p> 5.5 Morph類18</p><p> 6 Bezier曲線介紹18</p><p><b> 7 開發(fā)環(huán)境
19、20</b></p><p> 8 創(chuàng)意設計應用21</p><p> 8.1創(chuàng)意設計內容簡介21</p><p> 8.2曲面設計五環(huán)和鳥巢21</p><p><b> 8.3文字24</b></p><p> 8.4主類Main.java26</p>
20、;<p><b> 9 總結30</b></p><p><b> 致 謝30</b></p><p><b> 參考文獻31</b></p><p><b> 1 緒論</b></p><p> 1.1計算機圖形技術的發(fā)
21、展與應用</p><p> 計算機圖形學是研究如何用計算機表示、生成、處理和顯示圖形的一門學科。計算機圖形學包括計算機圖形處理與計算機圖像處理。計算機圖形處理主要研究三維空間型體二維空間幾何圖形的表示與顯示技術,包括幾何模型的計算機表示、幾何模型的坐標變換與顯示等。</p><p> 高級語言從C語言、C++語言發(fā)展到Java語言,計算機圖形系統(tǒng)的開發(fā)平臺也從早期的GKS、PHIGS等
22、發(fā)展到OpenGL等,在發(fā)展到現在的Java 3D等。在早期的圖形系統(tǒng)開發(fā)平臺上,對幾何元素的管理采用圖層或圖段的方式,絕大多數的算法都需要程序設計人員用高級語言編寫,而Java 3D集成了底層的圖形庫OpenGL與DirectX功能,對幾何形體采用場景式管理。</p><p> 計算機圖形學廣泛應用于以下領域:計算機輔助設計與制造、地形地貌與自然資源圖、計算機動畫、廣告制作與藝術、科學計算可視化、虛擬現實技術
23、以及游戲開發(fā)等。</p><p> Java 3D封裝了底層的圖形庫OpenGL與DirectX等功能,并且Java語言對網絡應用有很好的支持,因此Java 3D也是適合開發(fā)網絡游戲的三維圖形系統(tǒng)。</p><p> 1.2 Java3D技術的簡介</p><p> 1997年,SUN公司繼Java之后有推出了適用于Internet環(huán)境的跨平臺三維圖形開發(fā)工具
24、包Java 3D。Java 3D是Java 2 SDK的標準擴展,它對底層的圖形庫OpenGL與DirectX進行了封裝。Java本身具有的強大網絡功能通過瀏覽器在Internet上顯示。目前Java 3D以廣泛應用于科學計算可視化、機械設計、地理信息、動畫制作、醫(yī)學三維重建、教育等領域。Java 3D的功能與可編程性得到進一步擴展,并且Java 3D與Java一樣,一次編程可跨平臺運行。用Java 3D生成的代碼具有可傳輸性,即從服務
25、器端到客戶端傳輸的是生成三維圖像的程序與數據,而不是圖像本身。這樣,就可大大減少網絡傳輸數據量??蛻舳藦姆掌鞫讼螺d相應的Applet,由Java 3D運行環(huán)境解釋運行,并在執(zhí)行過程中不斷從服務器端獲取控制圖像變換的數據,可生成動態(tài)的三維圖形。</p><p> Java 3D也是一個交互式三維圖形應用編程接口API。與Java 2D、AWT、Swing包等的功能相互補充。Java 3D也集成了Java API
26、的功能,如圖像處理、文字顯示與處理、繪制二維圖形、交互式用戶界面設計等。</p><p> Java 3D能夠對場景的可視化進行并行計算與優(yōu)化,能夠自動應用計算機硬件的加速功能,并且提高圖形顯示的效率,能夠對場景進行預編譯。</p><p> Java3D用其自己定義的場景圖和觀察模式等技術構造了3D的上層結構,實現了在Java平臺使用三維技術。本章將介紹Java3D特有的兩個重要概念
27、:場景圖(Scene Graph)、觀察模式(View Model)。在接口使用上的介紹分為兩部分:說明如何使用Java3D接口;說明如何將Java3D技術與Java原有的Web技術(JSP、Serverlet)相結合,在網頁上實現三維顯示。</p><p> Java3D API是Sun定義的用于實現3D顯示的接口。3D技術是底層的顯示技術,Java3D提供了基于Java的上層接口。Java3D把OpenGL
28、和DirectX這些底層技術包裝在Java接口中。這種全新的設計使3D技術變得不再繁瑣并且可以加入到J2SE、J2EE的整套架構,這些特性保證了Java3D技術強大的擴展性。 </p><p> JAVA3D建立在JAVA2(JAVA1.2)基礎之上,JAVA語言的簡單性使JAVA3D的推廣有了可能。它實現了以下三維顯示能夠用到的功能: </p><p> 1. 生成簡單或復雜的形體(
29、也可以調用現有的三維形體) </p><p> 2. 使形體具有顏色、透明效果、貼圖 </p><p> 3. 在三維環(huán)境中生成燈光、移動燈光</p><p> 4. 具有行為的處理判斷能力(鍵盤、鼠標、定時等) </p><p> 5. 生成霧、背景、聲音</p><p> 6. 使形體變形、移動、生成三維
30、動畫</p><p> 7. 編寫非常復雜的應用程序,用于各種領域如VR(虛擬現實)</p><p> 1.3 Java3D與其他三維技術的比較</p><p> JAVA3D可應用在三維動畫、三維游戲、機械CAD等多個領域。但作為三維顯示實現技術,它并不是唯一選擇而且是一個新面孔。在Java3D之前已經存在很多三維技術,這些三維技術在實現的技術、使用的語言以
31、及適用的情況上各有不同,我主要介紹與Java3D又密切關系的三種技術:OpenGL、DIRECT3D、VRML </p><p><b> OpenGL</b></p><p> OpenGL是業(yè)界最為流行也是支持最廣泛的一個底層3D技術,幾乎所有的顯卡廠商都在底層實現了對OpenGL的支持和優(yōu)化。OpenGL同時也定義了一系列接口用于編程實現三維應用程序,但是這
32、些接口使用C(C++)語言實現并且很復雜。掌握針對OpenGL的編程技術需要花費大量時間精力。 </p><p><b> DIRECT3D</b></p><p> DIRECT3D是Microsoft公司推出的三維圖形編程API,它主要應用于三維游戲的編程。眾多優(yōu)秀的三維游戲都是由這個接口實現。與OpenGL一樣,Direct3D的實現主要使用C++語言。&l
33、t;/p><p> VRML2.0(VRML97)</p><p> 自1997年12月正式成為國際標準之后,在網絡上得到了廣泛的應用,這是一種比BASIC、JAVASCRIPT等還要簡單的語言。腳本化的語句可以編寫三維動畫片、三維游戲、計算機三維輔助教學。它最大的優(yōu)勢在于可以嵌在網頁中顯示,但這種簡單的語言功能較弱(如目前沒有形體之間的碰撞檢查功能),與JAVA語言等其它高級語言的連接較
34、難掌握,因而逐漸被淹沒在競爭激烈的網絡三維技術中。 </p><p> 1.4 Java3D的場景圖結構</p><p> Java3D實際上是Java語言在三維圖形領域的擴展,與Java一樣,Java3D有純粹的面向對象結構。Java3D的數據結構采用的是Scene Graphs Structure(場景圖),就是一些具有方向性的不對稱圖形組成的樹狀結構(圖1)。 </p>
35、;<p> 實際由Java3D定義的一系列的對象,這些對象不是雜亂無序,對象之間也不是毫無關系。如果想讓三維圖像正常顯示,必須在這兩點上遵循Java3D場景圖的規(guī)定。觀察圖1,Java3D場景圖的樹結構由各種各樣的對象組成:</p><p> 1.5 Java 3D的場景式組織</p><p> 在Java 3D中,將場景中的所有元素組織在一起,形成虛擬的整體,這個整體
36、就稱為Java 3D的一個虛擬場景或虛擬世界空間。在這個虛擬場景中包括了幾何體的定義信息、光源及其位置與方向、視點的位置與觀察方向、幾何體的顏色、材質、透明度等屬性、場景中的聲音等元素。</p><p> Java語言是以類、父類、子類、對象等方式組織一個軟件中的相關功能,Java 3D是對Java語言功能的擴展,同樣通過類、父類、子類、對象等方式組織一個場景。因此,Java 3D場景中的功能與組織結構條理清楚
37、,也是一個倒立的樹狀結構,每個子類同樣只具有一個父類,符合面向對象技術的思想。</p><p> 2 Java 3D基本圖形元素</p><p> 2.1Java 3D的虛擬場景空間設計</p><p> Java 3D是一種面向對象的API。通過場景圖來管理場景中的各種圖形元素。場景圖是一個樹狀結構,在該樹狀結構的各級節(jié)點表示該場景中的各種圖形元素。將由各種
38、圖形元素形成的一個場景的整體稱為一個虛擬空間。在這個虛擬空間中的圖形元素包括:幾何體的定義數據,幾何體顯示時的顏色、材質、透明度等屬性,背景顏色,光線類型,場景的作用范圍,視點、投影面即投影類型,對幾何體的坐標變換等。</p><p> Java 3D虛擬場景空間的一般結構如圖1所示。圖中實線表示父子關系,虛線表示引用關系。</p><p> 圖1 Java 3D虛擬場景空間結構圖&l
39、t;/p><p> Java 3D與Java一樣對各種功能的組織同樣采用父類、子類、對象實例的方式。Java 3D中規(guī)定了在一個虛擬場景空間中各種圖形元素的表示符號及虛擬場景空間的組織結構。在一個虛擬空間中可以包含多個Local節(jié)點。一個Local節(jié)點表示一個子場景的根節(jié)點。多個Local節(jié)點表示在該虛擬場景中有多個場景的根節(jié)點。但是,在實際應用中最常使用的是在一個虛擬空間中只包含一個子場景,也就是只包含一個Loc
40、al節(jié)點。在一個Local節(jié)點之下,可包含一到多個Branch Group節(jié)點。每個Branch Group節(jié)點表示一種圖形元素的集合。這種圖形元素的集合主要有倆種:(1)定義幾何體的數據與定義該幾何體的顏色、材質、透明度等外觀屬性;(2)定義該幾何體在顯示的時候在該場景中的其他元素,如背景顏色、光源類型、光源顏色、視點位置與觀察方向、投影平面的位置、坐標變換等。在實際應用中,最常用的是一個Local節(jié)點下只含有一個Branch Gro
41、up節(jié)點,</p><p> 在一個Local節(jié)點下只含有一個Branch Group節(jié)點情況下,必須定義一個Shape 3D對象,在該對象中定義幾何體的數據與幾何體的顏色、材質、透明度等外觀顯示特性,該Shape 3D對象一般加入在一個Transform Group類節(jié)點中。在一個Branch Group節(jié)點之下,可包含多個Transform Group節(jié)點。每個Transform Group節(jié)點表示一種即包
42、含有幾何元素定義,有包含有坐標變換的節(jié)點。每個Transform Group可包含一種或多種幾何體的定義,也可不包含有幾何體的定義信息。但是一個Transform Group節(jié)點必須包含一個或多個Transform3D對象,表示對Transform Group節(jié)點中定義的幾何體所進行的坐標變換。一個Transform3D對象表示對幾何體進行旋轉、平移和變比等坐標變換中的一種,多個Transform3D對象的組合形成一個總的坐標變換矩陣,
43、這個總的坐標變換矩陣就屬于包含這些Transform3D對象的Transform Group節(jié)點。如果該Transform Group節(jié)點中沒有定義幾何體,則這種坐標變換是針對</p><p> 2.2 Java 3D的坐標系統(tǒng) </p><p> Java 3D中用的是顯示器坐標系,顯示的物體是在觀察坐標系的投影平面上三維物體的投影。在Java 3D中,幾何體定義也采用該坐標系,所有
44、的坐標變換也是針對該坐標系的。O表示坐標原點,在顯示器的正中間。Z軸指向屏幕之外,也就是指向觀察者。X軸的正向沿水平方向向右,Y軸的正向沿垂直方向向上。觀察(圖2)</p><p> ?。▓D2.2)Java 3D 中所采用的而坐標系</p><p> 2.3 場景(Locale) </p><p> 構造一個三維場景,程序員必須運行一個Java 3D程序。這個
45、Java 3D應用程序必須首先創(chuàng)建一個虛擬宇宙對象并且至少把一個Locale對象附加之上。然后,構建出需要的場景圖像,它由一個分支組結點開始并且包括至少一個觀察平臺對象,而場景圖就是附加于這個觀察平臺。當一個包含場景圖的觀察對象被附加于一個虛擬宇宙,Java 3D的渲染循環(huán)就開始工作。這樣,場景就會和它的觀察對象一起被繪制在畫布上。</p><p> Java 3D虛擬空間的創(chuàng)建過程框圖如下:</p>
46、;<p> 2.4 Java 3D的點、線繪制</p><p> 2.4.1 GeometryArray類</p><p> Java 3D最優(yōu)秀的特點就是通過數組方式對各種幾何元素進行定義,并且通過類的方式對各種幾何圖形元素進行定義與管理,這是面向對象的設計思想的體現。</p><p> GeometryArray類是一個抽象類。定義點、線的
47、數組類PointArray類、LineArray類都是該類的子類。GeometryArray類包含有位置坐標數組、顏色數組、法向量數組、紋理坐標數組和定點屬性數組。所有的顏色值必須在0.0~1.0,所有的法向量都必須是單位向量。</p><p> public GeometryArray(int vertexCount,int vertexFormat)構造函數:通過給定的定點數和定點格式創(chuàng)建一個空的Geome
48、tryArray類的對象。</p><p> vertexCount:在GeometryArray中表示幾何體所包含的定點數。</p><p> vertexFormat:表示這些定點的格式,是一個多選項。其中,(1)COORDINATES:表示在該GeometryArray數組中包含點的坐標,并且該項是一個必選項;(2)NORMALS:表示包含每個頂點的法向量;(3)COLOR_3或
49、COLOR_4:表示每個頂點顏色,COLOR_3表示沒有Alpha信息,也就是指頂點數組包括沒有透明度的顏色;COLOR_4表示有Alpha信息,也就是指定點數組包括含有透明度顏色;當不指定COLOR_3或COLOR_4頂點格式顏色是,則GeometryArray對象中的每個頂點的默認顏色都是白色;當指定了COLOR_3或COLOR_4頂點格式顏色,則GeometryArray對象中的每個頂點的默認顏色都是黑色;(4)TEXTURE_C
50、OORDINATE_2,TEXTURE_COORDINATE_3或TEXTURE_COORDINATE_4:分別表示每個頂點的2D、3D或4D紋理坐標。</p><p> GeometryArray類中定義了多種方法,這些方法用來向GeometryArray類的對象中增加幾何元素。</p><p> setCoordinate、setCoordinates方法</p>&
51、lt;p> 用setCoordinate(int index,float[] coordinate)方法:改變一個點的三個坐標值,index為點的編號。float[] coordinate是一個一維數組,分別表示一個點的x、y和z坐標,也就是coordinate[0]、coordinate[1] 、coordinate[2]分別表示該點的x、y和z坐標值。</p><p> Point3f是javax.
52、vecmath.Tuple3f包中定義的一個類,用該類的構造函數Point3f(float x,float y,float z)設置一個Point3f對象的x、y和z坐標分量值,是點坐標表示的一種很方便的形式。</p><p> setCoordinates(int index,float[] coordinates)方法:從index指定的序號開始設置點的坐標值,index一般取0。</p>&
53、lt;p> setColor、setColors方法</p><p> 用setColor、setColors方法向GeometryArray類的對象中添加顏色值。public Color3f(float x,float y,float z)方法是Color3f類的一個構造函數,該構造函數通過設置R、G和B三個分量的值表示一種顏色。三個分量的值都必須在0.0~1.0之間。Color3f類對象的創(chuàng)建:Co
54、lor3f color=new Color3f(0.2f,0.5f,1.0f),則color.x=0.2f,color.y=0.5f,color.z=1.0f</p><p> color.x表示紅顏色值,color.y表示綠顏色值,color.z表示藍顏色值。</p><p> setColor(int index,Color3f[] color)方法設置在index處點的顏色值,C
55、olor3f與Point3f類似,用三個浮點表示一種顏色組合,每個浮點數的值都在0.0~1.0。</p><p> setColors(int index,float[] colors)方法對從index開始到index+length個點賦新值。</p><p><b> 2.4.2點的生成</b></p><p> 點由javax.me
56、dia.j3d.Geometry包中的PointArray類來定義。PointArray的第一個構造函數:public PointArray(int vertexCount,int vertexFormat)。PointArray類是GeometryArray類的子類,因此,它繼承了GeometryArray類中定義的方法與變量。vertexCount與vertexFormat參數的含義與GeometryArray類中含義相同。<
57、/p><p> PointAttributes類的對象用來點的各種屬性。點的屬性包括:(1)Size:定義點的大小(2)Antialiasing:英文含義是反走樣,當設置一個點的大小大于一個像素單位時,為了使點在顯示時接近于一個圓形,則需要設置該參數。</p><p><b> 2.4.3線的生成</b></p><p> LineArray
58、(int vertexCount,int vertexFormat)構造函數:應用相關參數創(chuàng)建一個空的LineArray類的對象。</p><p> vertexCount:表示生成多段直線段的點的總數。vertexFormat:表示這些點的格式。與 GeometryArray類中的參數相同。用這種方式定義的線段是不連續(xù)的。</p><p> LineAttributes類的對象定義所
59、有與線的顯示相關的屬性域狀態(tài)。構造函數如下</p><p> LineAttributes(float lineWidth,int linePattern,boolean</p><p> lineAntialiasing),</p><p> lineWidth:線寬。</p><p> linePattern:線型,如:PATTE
60、RN_SOLID,PATTERN_DASH,PATTERN_DOT,</p><p> PATTERN_DASHOT 。</p><p> lineAntialiasing:是否打開反走樣標志。</p><p> setLineWidth(float lineWidth):改變線寬</p><p> setLinePattern(in
61、tlinePattern):改變線型</p><p> setLineAntialiasingEnable(boolean state):打開或關閉反走樣</p><p><b> 線類型定義</b></p><p> 它能夠定義線條的線型。Pattern的線類型包含如下幾種:</p><p> PATTERN_
62、SOLID:用序號0表示,定義線類型為實線。</p><p> PATTERN_DASH:用序號1表示,定義線類型為虛線。</p><p> PATTERN_DOT:用序號2表示,定義線類型為點線。</p><p> PATTERN_DASH_DOT: 用序號3表示,定義線類型為點劃線。</p><p> PATTERN_USER_D
63、EFINED: 定義用戶自定義的線類型。</p><p> setLinePattern(int linePattern)設置LineAttributes 類的對象中的線型參數。</p><p><b> 反走樣屬性定義</b></p><p> setLineAntialiasingEnable(boolean state)設置Line
64、Attributes類的對象中的反走樣變量。 參數state 的取值為true或false。 True表示打開反走樣開關, false表示關閉。</p><p><b> 線寬設計</b></p><p> setLineWidth(float lineWidth)設置lineAttributes類的對象中的線寬。</p><p> 2.
65、4.4 Java 3D程序Shape 3D類對象中幾何元素的定義</p><p> Shape 3D是一種葉子節(jié)點類。在該節(jié)點中定義了一個幾何對象元素的列表和一個唯一的外觀屬性元素對象,該幾何對象元素列表包含了在Shape 3D中定義的所有幾何對象元素,這些幾何對象元素在該列表中的排列順序為:0、1、2 ……。一個Shape 3D的對象包含了一個或多個幾何元素對象和唯一的外觀元素對象。幾何對象定義形狀節(jié)點的幾何
66、數據。外觀定義幾何對象的外觀屬性,如顏色、材質和紋理等。Shape 3D類的重要方法如下:</p><p> addGeometry(Geometry geometry):向Shape 3D節(jié)點的幾何元素列表中增加參數指定的幾何元素。</p><p> setAppearance(Appearance appearance):設置整個Shape 3D節(jié)點的外觀屬性元素。</p&g
67、t;<p> setGeometry(Geometry geometry):用參數指定的幾何元素替換Shape 3D節(jié)點的幾何元素列表中index=0處的幾何元素。</p><p> 2.5 Appearance類</p><p> Appearance類的對象定義所有的顯示狀態(tài)。所有的這些狀態(tài)都分別作為一個Shape 3D節(jié)點的元素對象。顯示狀態(tài)包含的內容如下:<
68、;/p><p> ?。?)顏色屬性:用一個ColoringAttributes類的對象定義顏色。</p><p> (2)線的屬性:定義與線相關的屬性如線型、線寬、是否使用反走樣。用一LineAttributes類的對象定義。</p><p> ?。?)點的屬性:定義點大小及是否應用反走樣。用PointAttributes類的對象定義。</p><
69、p> (4)材質:定義一個物體在光照情況下的外觀,如環(huán)境光顏色,散射光顏色、鏡面反射光顏色、發(fā)射光顏色和光亮度。用Material類的對象定義。</p><p> ?。?)紋理:定義紋理圖像和過濾參數。通過Texture類的對象定義。紋理屬性:定義與紋理影射有關的參數。用TextureAttributes類的對象定義。</p><p> Appearance類的構造函數與方法&l
70、t;/p><p> Appearance app=new Appearance();</p><p> 1.setColoringAttributes(ColoringAttributes coloringAttributes)設置ColoringAttributes的對象到Appearance類的對象中。</p><p> 2.setLineAttributes
71、(LineAttributes lineAttributes) 設置LineAttributes的對象到Appearance類的對象中。</p><p> 3.setMaterial(Material material) 設置Material的對象到Appearance類的對象中。</p><p> 4. setPointAttributes(PointAttributes point
72、Attributes) 設置PointAttributes的對象到Appearance類的對象中。</p><p> 5. setTexture(Texture texture) 設置Texture的對象到Appearance類的對象中。</p><p> 6. setTextureAttributes(TextureAttributes textureAttributes) 設置Te
73、xtureAttributes的對象到Appearance類的對象中。</p><p> 2.6 Material類</p><p> Material類的對象定義一個三維物體在光照情況下的外觀。如果在一個Appearance類的對象中Material類的對象為null,則光照效果對所有包含該Appearance類的對象的節(jié)點不起作用。</p><p> 在M
74、aterial類中設置的屬性如下:</p><p> 環(huán)境光顏色:包含紅綠藍三色,顏色取值范圍為0.0~1.0。</p><p> 散射光顏色:當光照射時,物體材質表現出的紅綠藍顏色,顏色取值范圍為0.0~1.0。</p><p> 鏡面反射光顏色:在光照下,物體的鏡面反射的紅綠藍顏色,顏色取值范圍為0.0~1.0。</p><p>
75、 物體的發(fā)亮特性:表示物體的光亮程度,取值范圍[1.0,128.0]。 </p><p> Material類的相關方法如下:</p><p> setEmissiveColor(float r,float g,float b)方法設置放射光,用r,g,b為紅綠藍顏色分量設置環(huán)境光顏色。</p><p> setDiffuseColor(float r,fl
76、oat g,float b)方法設置放射光,用r,g,b為紅綠藍顏色分量設置散射光顏色。</p><p> setShininess(float shininess),設置發(fā)亮值。</p><p> 2.7 Light類</p><p> Light類葉子節(jié)點是一個抽象類,其中定義的一組參數屬于所有類型的光。這些參數包括光顏色,光照開關標志,和一個光的作用范圍
77、。</p><p> 在一個場景中的光可能包含有多個獨立定義的光源。光源的類型包括:平行光源DirectionalLight,點光源PointLight和AmbientLight。</p><p><b> 相關方法</b></p><p> ?。?)setEnable(boolean state)設置光的開關。state為true時表示光
78、開。</p><p> (2)setColor(Color3f color)設置光的顏色</p><p> ?。?)setInfluencingBounds(Bounds bounds)設置光照范圍</p><p><b> 3 基本形體</b></p><p> Java 3D在com.sun.j3d.utils
79、包中定義好的基本形體包括:長方體、圓柱體、圓錐體和球體。這些定義好的形體在某些應用中可直接使用。</p><p> 3.1長方體Box類</p><p> Box(float xdim,float ydim,float zdim,Appearance app)構造函數,用指定的外觀屬性app創(chuàng)建一個中心位于坐標原點的三維長方體。長方體的長寬高分別為2*xdim,2*ydim,2*zdi
80、m.</p><p> 3.2圓柱體Cylinder類</p><p> Cylinder(float radius,float height,Appearance app)生成底面半徑為radius,高位height的圓柱體。圓柱體的中心位于原點,圓柱體的中心軸與y軸重合</p><p> 3.3圓錐體Cone類</p><p>
81、Cone(float radius,float height,int primflags,Appearance app)用指定的primflags參數與app外觀屬性生成底面半徑為radius,高位height的圓錐體。圓錐體的中心位于原點,中心軸與y軸重合</p><p> 3.4球體Sphere類</p><p> Sphere(float radius,int primflags
82、,int divisions,Appearance app) 用指定的primflags參數與app外觀屬性生成半徑為radius的球。球的中心位于原點</p><p><b> 4 坐標變換</b></p><p> 4.1Transform3D類</p><p> Transform3D類主要功能是實現對幾何元素的坐標變換。</
83、p><p><b> 1.構造函數</b></p><p> Transform3D t=new Transform3D();</p><p> 創(chuàng)建一個新的Transform3D類的對象,該對象表示一個4*4的坐標變換矩陣,該坐標變換矩陣是一個單位矩陣。</p><p><b> 2.方法</b&g
84、t;</p><p> rotX(double angle)使圖形繞X軸逆時針旋轉一個角度.</p><p> rotY(double angle)使圖形繞Y軸逆時針旋轉一個角度.</p><p> rotZ(double angle)使圖形繞Z軸逆時針旋轉一個角度.</p><p> setScale(double scale)設置
85、變比變換系數,在X、Y、Z軸三個方向相同</p><p> setScale(Vector3d scale) 設置變比變換系數,分別設置在X、Y、Z軸三個方向的變比變換系數。</p><p> setTranslation(Vector3f trans)用trans中的三個分量設置對圖形的一種平移變換。</p><p> 4.2 TransformGroup類
86、與Transform3D類之間的關系</p><p> 一個Transform3D對象表示對幾何體的坐標平移、旋轉、變比等坐標中的一種,多個Transform3D對象的組合形成一個總的坐標變換矩陣。</p><p> 所有表示各種幾何變換的Transform3D對象包含在一個Transform類的對象中,表示對空間三維物體所進行的各種坐標變換的組合,如果表示一種幾何變換Transfor
87、m3D的對象沒有加入到該TransformGroup類的對象中,則該變換對三維物體不起作用。</p><p> 也可一次定義一個總的坐標變換矩陣,并創(chuàng)建一個Transform3D對象,將該Transform3D對象加入到TransformGroup類的對象中</p><p> 也可以分步定義多個不同類型的坐標變換矩陣,然后依次創(chuàng)建多個Transform3D對象,將這些Transform
88、3D對象一次加入TransformGroup類對象中,則以Transform3D的加入次序一次對物體進行變換。</p><p> 如果在一個TransformGroup節(jié)點中沒有定義任何的坐標變換,也就是沒有加入任何的Transform3D對象,則該TransformGroup節(jié)點擁有默認的4*4坐標變換矩陣,但該矩陣為單位矩陣,表示對幾何體不進行任何幾何變換。</p><p> 5
89、動畫編程基礎介紹</p><p><b> 5.1鼠標交互</b></p><p> Java 3D中提供了鼠標交互的工具類com.sun.j3d.util.behaviors.</p><p> MouseBehavior,利用這個工具類,可以方便的實現對鼠標事件的響應。MouseBehavior是Behavior的子類,是一個抽象類,
90、包括MouseRotate,</p><p> MouseZoom,MouseTranslate3各子類,分別可以通過鼠標的左中右鍵實現對幾何形體的旋轉,縮放,平移。</p><p> 與鼠標行為交互相關的還有一個接口MouseBehaviorCallback,這個接口提供了一個TransformChanged方法,當鼠標交互改變了坐標系時,將會調用這個方法。而MouseRotate,
91、MouseZoom,MouseTranslate都實現了這個接口,因此可以重載這個方法來實現一些效果。</p><p><b> 5.2鍵盤交互</b></p><p> Java 3D中提供了鍵盤交互的工具類com.sun.j3d.util.behaviors.</p><p> Keyboard.KeyNavigatorBehavio
92、r,它也是Behavior的子類。</p><p><b> 5.3 Alpha</b></p><p> 動畫研究的核心內容之一就是研究幾何形體如何在空間和時間中運動。Java 3D中給出了一系列的內插器,可以方便的用于動畫制作。各種內插器的使用和Alpha類密不可分,內插器定義了幾何形體如何在空間做運動,而Alpha定義了幾何形體運動的時間控制,它們結合起來就
93、可以編寫簡單的三維動畫。</p><p> ?。?)Alpha對象提供了動畫的時間控制,一個循環(huán)周期分為5段,包括:</p><p> 1.起始延時時段:phaseDelay Duration</p><p> 2.上升時段:increasingAlphaDuration</p><p> 3.高位時段alphaAtOneDuratio
94、n</p><p> 4.下降時段decreasingAlphaDuration</p><p> 5.底位時段alphaAtZeroDuration</p><p> 可以對每個時段指定所占用的時間,例如上升時段占用了一個周期的時間,那么幾何形體將從初始位置變化到終點位置,然后跳回初始位置,重復上述動作。用不同的組合方式,還可以產生多種不同的運動,</
95、p><p> Alpha的構造函數:</p><p> Alpha(int loopCount,int mode,long tiggerTime,</p><p> long phaseDelayDuration,</p><p> long increasingAlphaDuration,long increasingAlphaRamp
96、Duration,</p><p> long alphaAtOneDuration,</p><p> long decreasingAlphaDuration,long decreasingAlphaRampDuration,</p><p> long alphaAtZeroDuration),其中,表示循環(huán)次數;表示對象每一周期的運行方式,參數phas
97、eDelay Duration,increasingAlphaDuration,</p><p> alphaAtOneDuration,decreasingAlphaDuration,alphaAtZeroDuration與Alpha的循環(huán)周期的5段一一對應,increasingAlphaRampDuration,decreasingAlphaRampDuration為變化的加速度和反加速度,可以控制變化的速
98、度。</p><p><b> 5.4自定義行為</b></p><p> 自定義行為也必須是Behavior類的子類。擴展Behavior類,在構造器中指明要變幻的對象,還需要覆蓋initialize()方法和processStimulus()方法。在initialize()方法中設置行為的觸發(fā)條件,例如定時器﹑鼠標事件和鍵盤按鍵事件等。具體的行為內容在方法pr
99、ocessStimulus()中,例如可以修改幾何形體﹑坐標系或觸發(fā)其他行為等。</p><p> 5.5 Morph類</p><p> Java3D中Morph類可以將GeometryArray類型的幾何形體的頂點在多個頂點數組之間變形。從本質上說,Morph并不是一個內插器,而是一個行為。因此它需要擴展Behavior類,并且覆蓋initialize方法和processStimu
100、lus方法。</p><p> Morph類有以下兩種構造器:</p><p> Morph(GeometryArray[] geometry Arrays)</p><p> Morph(GeometryArray[] geometry Arrays , Appearance appearance)</p><p> 其中,geom
101、etryArrays為GeometryArray類型的數組,這個數組可以是GeometryArrays類型的也可以是它的子類例如TrangleArray, QuadStripArray和IndexedLineStripArray等,但是在同一個數組中,元素的類型必須相同。</p><p> Appearance 為這個幾何形體的外觀。</p><p> Morph中幾何形體的變化是通過
102、weight數組來控制的,weight中數組的元素對應頂點數組,例如weight[0]表示其實點的頂點數組,weight[n]表示變化終點的頂點數組。Weight中元素的數值在0~1之間變化,其意義就是變化的程度。</p><p> 6 Bezier曲線介紹</p><p> Bezier曲線定義 </p><p> 給定n+1個控制頂點Pi(i=0~n) ,
103、則Bezier曲線定義為: </p><p> P(t)=∑Bi,n(t)Pi ,t∈[0,1] </p><p> 其中:Bi,n(t)稱為基函數。 </p><p> Bi,n(t)=Ci,nt^i*(1-t)^n-i </p><p> Ci,n=n!/(i!*(n-i)!) </p><p> Be
104、zier曲線性質</p><p><b> ?。?)端點性質: </b></p><p> a)P(0)=P0, P(1)=Pn, 即:曲線過二端點。 </p><p> b)P’(0)=n(P1-P0), P’(1)=n(Pn-Pn-1) </p><p> 即:在二端點與控制多邊形相切。 </p>
105、<p> (2)凸包性:Bezier曲線完成落在控制多邊形的凸包內。 </p><p> ?。?)對稱性:由Pi與Pn-i組成的曲線,位置一致,方向相反。 </p><p> ?。?)包絡性:Pn(t)=(1-t)Pn-1(t)+tPn-1(t) </p><p> 在CAD/CAM中,常采用Bezier曲線曲面,這樣便于理解曲線/曲面。但采用Bez
106、ier形式的曲線曲面不能精確的表示二次曲線和二次曲面,如球體和圓。將多項式改為有理形式,不僅能精確表示二次曲線和二次曲面,且增加了設計的自由度。重復的進行兩點線性插值,可以構造Bezier Curve。重復的進行兩點有理插值,可以構造有理Bezier Curve。 </p><p> 與控制頂點類似,有理Bezter曲線上的點可映射為Bezter曲線上的點或對應的控制多邊形上的點。在透視投影使用理形式與非有理形
107、式產生相同投影時,有理Besier曲線曲面和有理B樣條曲線曲面繼承了Bezier曲線曲面和B樣條曲線曲面的簡單、優(yōu)美的特性。這種形式,數學上的分析及幾何特性的掌握了解都比其他4D空間(wx、wy、wz、w)方法和單純的3D空間有理形式要簡單和容易。 </p><p> 現在,有理曲線曲面不僅僅用于表示和構造二次曲線曲面。對有理曲線曲面的權因子該如何選取往往不很清楚,而且有理形式的計算比非有理形式復雜,但是,由于
108、其構造特性,現在人們已經開始考慮有理Bezter和有理B樣條曲線曲面的應用。</p><p> Bezier曲線、曲面的拼接</p><p> 要設計復雜的Bezier曲線,就要將單段的Bezier曲線拼接起來。同樣,要設計復雜的Bezier曲面,需要將多個單片Bezier曲面拼接起來。</p><p> 這里首先介紹曲線、曲面在拼接時的連續(xù)性問題。</
109、p><p> ?。?) 曲線、曲面拼接的連續(xù)性</p><p> C0連續(xù)(零階參數連續(xù)):第一段曲線的終點與第二段曲線的起點位置重合。</p><p> C1連續(xù)(一階參數連續(xù)):兩相拼接的曲線在拼接點處重合,在拼接點處有相同的一階導數。</p><p> C2連續(xù)(二階參數連續(xù)):兩相拼接的曲線在拼接點處重合,在拼接點處有相同的一階導數
110、和二階導數。</p><p> G0連續(xù)(零階幾何連續(xù)):第一段曲線的終點與第二段曲線的起點位置重合,稱為G0連續(xù),同時也是C0連續(xù)。</p><p> G1連續(xù)(一階幾何連續(xù)):兩相拼接的曲線段在拼接點處重合,切線方向相同,但大小不等,則這種連續(xù)稱為G1連續(xù)。</p><p> G2連續(xù)(二階幾何連續(xù)):兩相拼接的曲線段在拼接點處重合,在拼接點處G0連續(xù),G
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java3d教程
- 基于Java3D的虛擬漫游系統(tǒng)研究.pdf
- 基于Java3D與VRML的虛擬槍械訓練系統(tǒng)設計.pdf
- 基于Java3D的免疫系統(tǒng)模型研究.pdf
- 基于Java3D的針灸銅人人臉模擬.pdf
- 基于Java3D的虛擬漫游系統(tǒng)的研究.pdf
- 基于Java3D的虛擬裝配技術研究.pdf
- 基于Java3D和VRML的數字校園系統(tǒng).pdf
- 基于Java3D的鋼結構節(jié)點的虛擬裝配.pdf
- 基于Java3D的機械液壓虛擬實驗平臺的設計與實現.pdf
- 基于Java3D的ACIS幾何模型顯示技術研究.pdf
- 11478.基于java3d的太陽系虛擬仿真研究
- 基于Java3D技術的科學計算可視化研究.pdf
- 基于JAVA3D的隨機場景系統(tǒng)技術研究.pdf
- 基于Java3D的服裝虛擬產品設計和制造技術的研究.pdf
- 基于Java3D的虛擬加工系統(tǒng)關鍵技術研究.pdf
- 基于JAVA3D虛擬現實場景的改進LOD算法研究.pdf
- 畢業(yè)論文范文——基于java3d的網絡三維技術的設計與實現
- 畢業(yè)論文范文——基于java3d的網絡三維技術的設計與實現
- 基于Java3D虛擬現實技術的機械臂運動仿真研究.pdf
評論
0/150
提交評論