2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  畢 業(yè) 論 文(設(shè)計(jì))</p><p>  題 目: 基于Java 3D的復(fù)雜曲面創(chuàng)意設(shè)計(jì)</p><p><b>  摘 要</b></p><p>  三維復(fù)雜曲面造型技術(shù)主要是研究在計(jì)算機(jī)圖像系統(tǒng)的環(huán)境下對(duì)曲面的表示、設(shè)計(jì)、顯示和分析。在設(shè)計(jì)中,往往給出的型值點(diǎn)以及由此產(chǎn)生的樣條曲線有時(shí)不能滿足美觀上的

2、要求。該設(shè)計(jì)模型中采用了復(fù)雜曲線Bezier提出的參數(shù)曲線表示方法,即Bezier曲線。在此基礎(chǔ)上生成Bezier曲面,并進(jìn)行拼接生成復(fù)雜曲面。</p><p>  本文主要著眼于3D曲面技術(shù)的實(shí)現(xiàn)與應(yīng)用,并完成基于Java 3D實(shí)現(xiàn)復(fù)雜曲面造型,多曲面拼接,3D坐標(biāo)變換技術(shù)和3D紋理映射。通過(guò)利用Bezier曲面的設(shè)計(jì)和拼接技術(shù),實(shí)現(xiàn)鳥(niǎo)巢和五環(huán)的外形塑造和模擬運(yùn)動(dòng)效果。首先,定義了16*27個(gè)控制頂點(diǎn),來(lái)控制2

3、7個(gè)Bezier曲面的形狀,將曲面拼接生成鳥(niǎo)巢和五環(huán)造型。 其中,在定義相鄰兩個(gè)曲面的控制頂點(diǎn)時(shí),對(duì)曲面保持G0連續(xù),將相鄰兩個(gè)曲面進(jìn)行拼接。然后,把所定義的其中19個(gè)Bezier曲面全部拼接,形成五環(huán),同時(shí)把8個(gè)Bezier曲面全部拼接,形成鳥(niǎo)巢。然后運(yùn)用Alpha類和插值器PositionInterpolator類實(shí)現(xiàn)運(yùn)動(dòng)效果,最后生成3D場(chǎng)景。 </p><p>  本文重點(diǎn)研究三維復(fù)雜曲面造型,并完成基于

4、Java 3D技術(shù)實(shí)現(xiàn)鳥(niǎo)巢和五環(huán)外形設(shè)計(jì)。其目的是對(duì)三維復(fù)雜曲面造型的實(shí)現(xiàn),本文編寫(xiě)的Java 3D程序成功地通過(guò)了編譯和運(yùn)行過(guò)程,最后顯示結(jié)果,成功的應(yīng)用JAVA及JAVA 3D完成了鳥(niǎo)巢和五環(huán)的造型設(shè)計(jì)和展示效果。</p><p>  關(guān)鍵字:計(jì)算機(jī)圖形學(xué);Java 3D;復(fù)雜曲面;Bezier曲面;鳥(niǎo)巢和五環(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計(jì)算

13、機(jī)圖形技術(shù)的發(fā)展與應(yīng)用1</p><p>  1.2 Java3D技術(shù)的簡(jiǎn)介1</p><p>  1.3 Java3D與其他三維技術(shù)的比較2</p><p>  1.4 Java3D的場(chǎng)景圖結(jié)構(gòu)3</p><p>  1.5 Java 3D的場(chǎng)景式組織4</p><p>  2 Java 3D基本圖形元素

14、5</p><p>  2.1Java 3D的虛擬場(chǎng)景空間設(shè)計(jì)5</p><p>  2.2 Java 3D的坐標(biāo)系統(tǒng)7</p><p>  2.3 場(chǎng)景(Locale)7</p><p>  2.4 Java 3D的點(diǎn)、線繪制8</p><p>  2.4.1 GeometryArray類8</p&g

15、t;<p>  2.4.2點(diǎn)的生成10</p><p>  2.4.3線的生成10</p><p>  2.4.4 Java 3D程序Shape 3D類對(duì)象中幾何元素的定義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長(zhǎng)方體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 坐標(biāo)變換14</b></p><p>  4.1Transform3D類14</p><p>  4.2 TransformGroup類與Transform3D類之間的關(guān)系15</p><p>  5 動(dòng)畫(huà)編程基礎(chǔ)介紹16</p><p>  5.1鼠標(biāo)

18、交互16</p><p>  5.2鍵盤(pán)交互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 開(kāi)發(fā)環(huán)境

19、20</b></p><p>  8 創(chuàng)意設(shè)計(jì)應(yīng)用21</p><p>  8.1創(chuàng)意設(shè)計(jì)內(nèi)容簡(jiǎn)介21</p><p>  8.2曲面設(shè)計(jì)五環(huán)和鳥(niǎo)巢21</p><p><b>  8.3文字24</b></p><p>  8.4主類Main.java26</p>

20、;<p><b>  9 總結(jié)30</b></p><p><b>  致 謝30</b></p><p><b>  參考文獻(xiàn)31</b></p><p><b>  1 緒論</b></p><p>  1.1計(jì)算機(jī)圖形技術(shù)的發(fā)

21、展與應(yīng)用</p><p>  計(jì)算機(jī)圖形學(xué)是研究如何用計(jì)算機(jī)表示、生成、處理和顯示圖形的一門學(xué)科。計(jì)算機(jī)圖形學(xué)包括計(jì)算機(jī)圖形處理與計(jì)算機(jī)圖像處理。計(jì)算機(jī)圖形處理主要研究三維空間型體二維空間幾何圖形的表示與顯示技術(shù),包括幾何模型的計(jì)算機(jī)表示、幾何模型的坐標(biāo)變換與顯示等。</p><p>  高級(jí)語(yǔ)言從C語(yǔ)言、C++語(yǔ)言發(fā)展到Java語(yǔ)言,計(jì)算機(jī)圖形系統(tǒng)的開(kāi)發(fā)平臺(tái)也從早期的GKS、PHIGS等

22、發(fā)展到OpenGL等,在發(fā)展到現(xiàn)在的Java 3D等。在早期的圖形系統(tǒng)開(kāi)發(fā)平臺(tái)上,對(duì)幾何元素的管理采用圖層或圖段的方式,絕大多數(shù)的算法都需要程序設(shè)計(jì)人員用高級(jí)語(yǔ)言編寫(xiě),而Java 3D集成了底層的圖形庫(kù)OpenGL與DirectX功能,對(duì)幾何形體采用場(chǎng)景式管理。</p><p>  計(jì)算機(jī)圖形學(xué)廣泛應(yīng)用于以下領(lǐng)域:計(jì)算機(jī)輔助設(shè)計(jì)與制造、地形地貌與自然資源圖、計(jì)算機(jī)動(dòng)畫(huà)、廣告制作與藝術(shù)、科學(xué)計(jì)算可視化、虛擬現(xiàn)實(shí)技術(shù)

23、以及游戲開(kāi)發(fā)等。</p><p>  Java 3D封裝了底層的圖形庫(kù)OpenGL與DirectX等功能,并且Java語(yǔ)言對(duì)網(wǎng)絡(luò)應(yīng)用有很好的支持,因此Java 3D也是適合開(kāi)發(fā)網(wǎng)絡(luò)游戲的三維圖形系統(tǒng)。</p><p>  1.2 Java3D技術(shù)的簡(jiǎn)介</p><p>  1997年,SUN公司繼Java之后有推出了適用于Internet環(huán)境的跨平臺(tái)三維圖形開(kāi)發(fā)工具

24、包Java 3D。Java 3D是Java 2 SDK的標(biāo)準(zhǔn)擴(kuò)展,它對(duì)底層的圖形庫(kù)OpenGL與DirectX進(jìn)行了封裝。Java本身具有的強(qiáng)大網(wǎng)絡(luò)功能通過(guò)瀏覽器在Internet上顯示。目前Java 3D以廣泛應(yīng)用于科學(xué)計(jì)算可視化、機(jī)械設(shè)計(jì)、地理信息、動(dòng)畫(huà)制作、醫(yī)學(xué)三維重建、教育等領(lǐng)域。Java 3D的功能與可編程性得到進(jìn)一步擴(kuò)展,并且Java 3D與Java一樣,一次編程可跨平臺(tái)運(yùn)行。用Java 3D生成的代碼具有可傳輸性,即從服務(wù)

25、器端到客戶端傳輸?shù)氖巧扇S圖像的程序與數(shù)據(jù),而不是圖像本身。這樣,就可大大減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量??蛻舳藦姆?wù)器端下載相應(yīng)的Applet,由Java 3D運(yùn)行環(huán)境解釋運(yùn)行,并在執(zhí)行過(guò)程中不斷從服務(wù)器端獲取控制圖像變換的數(shù)據(jù),可生成動(dòng)態(tài)的三維圖形。</p><p>  Java 3D也是一個(gè)交互式三維圖形應(yīng)用編程接口API。與Java 2D、AWT、Swing包等的功能相互補(bǔ)充。Java 3D也集成了Java API

26、的功能,如圖像處理、文字顯示與處理、繪制二維圖形、交互式用戶界面設(shè)計(jì)等。</p><p>  Java 3D能夠?qū)?chǎng)景的可視化進(jìn)行并行計(jì)算與優(yōu)化,能夠自動(dòng)應(yīng)用計(jì)算機(jī)硬件的加速功能,并且提高圖形顯示的效率,能夠?qū)?chǎng)景進(jìn)行預(yù)編譯。</p><p>  Java3D用其自己定義的場(chǎng)景圖和觀察模式等技術(shù)構(gòu)造了3D的上層結(jié)構(gòu),實(shí)現(xiàn)了在Java平臺(tái)使用三維技術(shù)。本章將介紹Java3D特有的兩個(gè)重要概念

27、:場(chǎng)景圖(Scene Graph)、觀察模式(View Model)。在接口使用上的介紹分為兩部分:說(shuō)明如何使用Java3D接口;說(shuō)明如何將Java3D技術(shù)與Java原有的Web技術(shù)(JSP、Serverlet)相結(jié)合,在網(wǎng)頁(yè)上實(shí)現(xiàn)三維顯示。</p><p>  Java3D API是Sun定義的用于實(shí)現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL

28、和DirectX這些底層技術(shù)包裝在Java接口中。這種全新的設(shè)計(jì)使3D技術(shù)變得不再繁瑣并且可以加入到J2SE、J2EE的整套架構(gòu),這些特性保證了Java3D技術(shù)強(qiáng)大的擴(kuò)展性。 </p><p>  JAVA3D建立在JAVA2(JAVA1.2)基礎(chǔ)之上,JAVA語(yǔ)言的簡(jiǎn)單性使JAVA3D的推廣有了可能。它實(shí)現(xiàn)了以下三維顯示能夠用到的功能: </p><p>  1. 生成簡(jiǎn)單或復(fù)雜的形體(

29、也可以調(diào)用現(xiàn)有的三維形體) </p><p>  2. 使形體具有顏色、透明效果、貼圖 </p><p>  3. 在三維環(huán)境中生成燈光、移動(dòng)燈光</p><p>  4. 具有行為的處理判斷能力(鍵盤(pán)、鼠標(biāo)、定時(shí)等) </p><p>  5. 生成霧、背景、聲音</p><p>  6. 使形體變形、移動(dòng)、生成三維

30、動(dòng)畫(huà)</p><p>  7. 編寫(xiě)非常復(fù)雜的應(yīng)用程序,用于各種領(lǐng)域如VR(虛擬現(xiàn)實(shí))</p><p>  1.3 Java3D與其他三維技術(shù)的比較</p><p>  JAVA3D可應(yīng)用在三維動(dòng)畫(huà)、三維游戲、機(jī)械CAD等多個(gè)領(lǐng)域。但作為三維顯示實(shí)現(xiàn)技術(shù),它并不是唯一選擇而且是一個(gè)新面孔。在Java3D之前已經(jīng)存在很多三維技術(shù),這些三維技術(shù)在實(shí)現(xiàn)的技術(shù)、使用的語(yǔ)言以

31、及適用的情況上各有不同,我主要介紹與Java3D又密切關(guān)系的三種技術(shù):OpenGL、DIRECT3D、VRML </p><p><b>  OpenGL</b></p><p>  OpenGL是業(yè)界最為流行也是支持最廣泛的一個(gè)底層3D技術(shù),幾乎所有的顯卡廠商都在底層實(shí)現(xiàn)了對(duì)OpenGL的支持和優(yōu)化。OpenGL同時(shí)也定義了一系列接口用于編程實(shí)現(xiàn)三維應(yīng)用程序,但是這

32、些接口使用C(C++)語(yǔ)言實(shí)現(xiàn)并且很復(fù)雜。掌握針對(duì)OpenGL的編程技術(shù)需要花費(fèi)大量時(shí)間精力。 </p><p><b>  DIRECT3D</b></p><p>  DIRECT3D是Microsoft公司推出的三維圖形編程API,它主要應(yīng)用于三維游戲的編程。眾多優(yōu)秀的三維游戲都是由這個(gè)接口實(shí)現(xiàn)。與OpenGL一樣,Direct3D的實(shí)現(xiàn)主要使用C++語(yǔ)言。&l

33、t;/p><p>  VRML2.0(VRML97)</p><p>  自1997年12月正式成為國(guó)際標(biāo)準(zhǔn)之后,在網(wǎng)絡(luò)上得到了廣泛的應(yīng)用,這是一種比BASIC、JAVASCRIPT等還要簡(jiǎn)單的語(yǔ)言。腳本化的語(yǔ)句可以編寫(xiě)三維動(dòng)畫(huà)片、三維游戲、計(jì)算機(jī)三維輔助教學(xué)。它最大的優(yōu)勢(shì)在于可以嵌在網(wǎng)頁(yè)中顯示,但這種簡(jiǎn)單的語(yǔ)言功能較弱(如目前沒(méi)有形體之間的碰撞檢查功能),與JAVA語(yǔ)言等其它高級(jí)語(yǔ)言的連接較

34、難掌握,因而逐漸被淹沒(méi)在競(jìng)爭(zhēng)激烈的網(wǎng)絡(luò)三維技術(shù)中。 </p><p>  1.4 Java3D的場(chǎng)景圖結(jié)構(gòu)</p><p>  Java3D實(shí)際上是Java語(yǔ)言在三維圖形領(lǐng)域的擴(kuò)展,與Java一樣,Java3D有純粹的面向?qū)ο蠼Y(jié)構(gòu)。Java3D的數(shù)據(jù)結(jié)構(gòu)采用的是Scene Graphs Structure(場(chǎng)景圖),就是一些具有方向性的不對(duì)稱圖形組成的樹(shù)狀結(jié)構(gòu)(圖1)。 </p>

35、;<p>  實(shí)際由Java3D定義的一系列的對(duì)象,這些對(duì)象不是雜亂無(wú)序,對(duì)象之間也不是毫無(wú)關(guān)系。如果想讓三維圖像正常顯示,必須在這兩點(diǎn)上遵循Java3D場(chǎng)景圖的規(guī)定。觀察圖1,Java3D場(chǎng)景圖的樹(shù)結(jié)構(gòu)由各種各樣的對(duì)象組成:</p><p>  1.5 Java 3D的場(chǎng)景式組織</p><p>  在Java 3D中,將場(chǎng)景中的所有元素組織在一起,形成虛擬的整體,這個(gè)整體

36、就稱為Java 3D的一個(gè)虛擬場(chǎng)景或虛擬世界空間。在這個(gè)虛擬場(chǎng)景中包括了幾何體的定義信息、光源及其位置與方向、視點(diǎn)的位置與觀察方向、幾何體的顏色、材質(zhì)、透明度等屬性、場(chǎng)景中的聲音等元素。</p><p>  Java語(yǔ)言是以類、父類、子類、對(duì)象等方式組織一個(gè)軟件中的相關(guān)功能,Java 3D是對(duì)Java語(yǔ)言功能的擴(kuò)展,同樣通過(guò)類、父類、子類、對(duì)象等方式組織一個(gè)場(chǎng)景。因此,Java 3D場(chǎng)景中的功能與組織結(jié)構(gòu)條理清楚

37、,也是一個(gè)倒立的樹(shù)狀結(jié)構(gòu),每個(gè)子類同樣只具有一個(gè)父類,符合面向?qū)ο蠹夹g(shù)的思想。</p><p>  2 Java 3D基本圖形元素</p><p>  2.1Java 3D的虛擬場(chǎng)景空間設(shè)計(jì)</p><p>  Java 3D是一種面向?qū)ο蟮腁PI。通過(guò)場(chǎng)景圖來(lái)管理場(chǎng)景中的各種圖形元素。場(chǎng)景圖是一個(gè)樹(shù)狀結(jié)構(gòu),在該樹(shù)狀結(jié)構(gòu)的各級(jí)節(jié)點(diǎn)表示該場(chǎng)景中的各種圖形元素。將由各種

38、圖形元素形成的一個(gè)場(chǎng)景的整體稱為一個(gè)虛擬空間。在這個(gè)虛擬空間中的圖形元素包括:幾何體的定義數(shù)據(jù),幾何體顯示時(shí)的顏色、材質(zhì)、透明度等屬性,背景顏色,光線類型,場(chǎng)景的作用范圍,視點(diǎn)、投影面即投影類型,對(duì)幾何體的坐標(biāo)變換等。</p><p>  Java 3D虛擬場(chǎng)景空間的一般結(jié)構(gòu)如圖1所示。圖中實(shí)線表示父子關(guān)系,虛線表示引用關(guān)系。</p><p>  圖1 Java 3D虛擬場(chǎng)景空間結(jié)構(gòu)圖&l

39、t;/p><p>  Java 3D與Java一樣對(duì)各種功能的組織同樣采用父類、子類、對(duì)象實(shí)例的方式。Java 3D中規(guī)定了在一個(gè)虛擬場(chǎng)景空間中各種圖形元素的表示符號(hào)及虛擬場(chǎng)景空間的組織結(jié)構(gòu)。在一個(gè)虛擬空間中可以包含多個(gè)Local節(jié)點(diǎn)。一個(gè)Local節(jié)點(diǎn)表示一個(gè)子場(chǎng)景的根節(jié)點(diǎn)。多個(gè)Local節(jié)點(diǎn)表示在該虛擬場(chǎng)景中有多個(gè)場(chǎng)景的根節(jié)點(diǎn)。但是,在實(shí)際應(yīng)用中最常使用的是在一個(gè)虛擬空間中只包含一個(gè)子場(chǎng)景,也就是只包含一個(gè)Loc

40、al節(jié)點(diǎn)。在一個(gè)Local節(jié)點(diǎn)之下,可包含一到多個(gè)Branch Group節(jié)點(diǎn)。每個(gè)Branch Group節(jié)點(diǎn)表示一種圖形元素的集合。這種圖形元素的集合主要有倆種:(1)定義幾何體的數(shù)據(jù)與定義該幾何體的顏色、材質(zhì)、透明度等外觀屬性;(2)定義該幾何體在顯示的時(shí)候在該場(chǎng)景中的其他元素,如背景顏色、光源類型、光源顏色、視點(diǎn)位置與觀察方向、投影平面的位置、坐標(biāo)變換等。在實(shí)際應(yīng)用中,最常用的是一個(gè)Local節(jié)點(diǎn)下只含有一個(gè)Branch Gro

41、up節(jié)點(diǎn),</p><p>  在一個(gè)Local節(jié)點(diǎn)下只含有一個(gè)Branch Group節(jié)點(diǎn)情況下,必須定義一個(gè)Shape 3D對(duì)象,在該對(duì)象中定義幾何體的數(shù)據(jù)與幾何體的顏色、材質(zhì)、透明度等外觀顯示特性,該Shape 3D對(duì)象一般加入在一個(gè)Transform Group類節(jié)點(diǎn)中。在一個(gè)Branch Group節(jié)點(diǎn)之下,可包含多個(gè)Transform Group節(jié)點(diǎn)。每個(gè)Transform Group節(jié)點(diǎn)表示一種即包

42、含有幾何元素定義,有包含有坐標(biāo)變換的節(jié)點(diǎn)。每個(gè)Transform Group可包含一種或多種幾何體的定義,也可不包含有幾何體的定義信息。但是一個(gè)Transform Group節(jié)點(diǎn)必須包含一個(gè)或多個(gè)Transform3D對(duì)象,表示對(duì)Transform Group節(jié)點(diǎn)中定義的幾何體所進(jìn)行的坐標(biāo)變換。一個(gè)Transform3D對(duì)象表示對(duì)幾何體進(jìn)行旋轉(zhuǎn)、平移和變比等坐標(biāo)變換中的一種,多個(gè)Transform3D對(duì)象的組合形成一個(gè)總的坐標(biāo)變換矩陣,

43、這個(gè)總的坐標(biāo)變換矩陣就屬于包含這些Transform3D對(duì)象的Transform Group節(jié)點(diǎn)。如果該Transform Group節(jié)點(diǎn)中沒(méi)有定義幾何體,則這種坐標(biāo)變換是針對(duì)</p><p>  2.2 Java 3D的坐標(biāo)系統(tǒng) </p><p>  Java 3D中用的是顯示器坐標(biāo)系,顯示的物體是在觀察坐標(biāo)系的投影平面上三維物體的投影。在Java 3D中,幾何體定義也采用該坐標(biāo)系,所有

44、的坐標(biāo)變換也是針對(duì)該坐標(biāo)系的。O表示坐標(biāo)原點(diǎn),在顯示器的正中間。Z軸指向屏幕之外,也就是指向觀察者。X軸的正向沿水平方向向右,Y軸的正向沿垂直方向向上。觀察(圖2)</p><p> ?。▓D2.2)Java 3D 中所采用的而坐標(biāo)系</p><p>  2.3 場(chǎng)景(Locale) </p><p>  構(gòu)造一個(gè)三維場(chǎng)景,程序員必須運(yùn)行一個(gè)Java 3D程序。這個(gè)

45、Java 3D應(yīng)用程序必須首先創(chuàng)建一個(gè)虛擬宇宙對(duì)象并且至少把一個(gè)Locale對(duì)象附加之上。然后,構(gòu)建出需要的場(chǎng)景圖像,它由一個(gè)分支組結(jié)點(diǎn)開(kāi)始并且包括至少一個(gè)觀察平臺(tái)對(duì)象,而場(chǎng)景圖就是附加于這個(gè)觀察平臺(tái)。當(dāng)一個(gè)包含場(chǎng)景圖的觀察對(duì)象被附加于一個(gè)虛擬宇宙,Java 3D的渲染循環(huán)就開(kāi)始工作。這樣,場(chǎng)景就會(huì)和它的觀察對(duì)象一起被繪制在畫(huà)布上。</p><p>  Java 3D虛擬空間的創(chuàng)建過(guò)程框圖如下:</p>

46、;<p>  2.4 Java 3D的點(diǎn)、線繪制</p><p>  2.4.1 GeometryArray類</p><p>  Java 3D最優(yōu)秀的特點(diǎn)就是通過(guò)數(shù)組方式對(duì)各種幾何元素進(jìn)行定義,并且通過(guò)類的方式對(duì)各種幾何圖形元素進(jìn)行定義與管理,這是面向?qū)ο蟮脑O(shè)計(jì)思想的體現(xiàn)。</p><p>  GeometryArray類是一個(gè)抽象類。定義點(diǎn)、線的

47、數(shù)組類PointArray類、LineArray類都是該類的子類。GeometryArray類包含有位置坐標(biāo)數(shù)組、顏色數(shù)組、法向量數(shù)組、紋理坐標(biāo)數(shù)組和定點(diǎn)屬性數(shù)組。所有的顏色值必須在0.0~1.0,所有的法向量都必須是單位向量。</p><p>  public GeometryArray(int vertexCount,int vertexFormat)構(gòu)造函數(shù):通過(guò)給定的定點(diǎn)數(shù)和定點(diǎn)格式創(chuàng)建一個(gè)空的Geome

48、tryArray類的對(duì)象。</p><p>  vertexCount:在GeometryArray中表示幾何體所包含的定點(diǎn)數(shù)。</p><p>  vertexFormat:表示這些定點(diǎn)的格式,是一個(gè)多選項(xiàng)。其中,(1)COORDINATES:表示在該GeometryArray數(shù)組中包含點(diǎn)的坐標(biāo),并且該項(xiàng)是一個(gè)必選項(xiàng);(2)NORMALS:表示包含每個(gè)頂點(diǎn)的法向量;(3)COLOR_3或

49、COLOR_4:表示每個(gè)頂點(diǎn)顏色,COLOR_3表示沒(méi)有Alpha信息,也就是指頂點(diǎn)數(shù)組包括沒(méi)有透明度的顏色;COLOR_4表示有Alpha信息,也就是指定點(diǎn)數(shù)組包括含有透明度顏色;當(dāng)不指定COLOR_3或COLOR_4頂點(diǎn)格式顏色是,則GeometryArray對(duì)象中的每個(gè)頂點(diǎn)的默認(rèn)顏色都是白色;當(dāng)指定了COLOR_3或COLOR_4頂點(diǎn)格式顏色,則GeometryArray對(duì)象中的每個(gè)頂點(diǎn)的默認(rèn)顏色都是黑色;(4)TEXTURE_C

50、OORDINATE_2,TEXTURE_COORDINATE_3或TEXTURE_COORDINATE_4:分別表示每個(gè)頂點(diǎn)的2D、3D或4D紋理坐標(biāo)。</p><p>  GeometryArray類中定義了多種方法,這些方法用來(lái)向GeometryArray類的對(duì)象中增加幾何元素。</p><p>  setCoordinate、setCoordinates方法</p>&

51、lt;p>  用setCoordinate(int index,float[] coordinate)方法:改變一個(gè)點(diǎn)的三個(gè)坐標(biāo)值,index為點(diǎn)的編號(hào)。float[] coordinate是一個(gè)一維數(shù)組,分別表示一個(gè)點(diǎn)的x、y和z坐標(biāo),也就是coordinate[0]、coordinate[1] 、coordinate[2]分別表示該點(diǎn)的x、y和z坐標(biāo)值。</p><p>  Point3f是javax.

52、vecmath.Tuple3f包中定義的一個(gè)類,用該類的構(gòu)造函數(shù)Point3f(float x,float y,float z)設(shè)置一個(gè)Point3f對(duì)象的x、y和z坐標(biāo)分量值,是點(diǎn)坐標(biāo)表示的一種很方便的形式。</p><p>  setCoordinates(int index,float[] coordinates)方法:從index指定的序號(hào)開(kāi)始設(shè)置點(diǎn)的坐標(biāo)值,index一般取0。</p>&

53、lt;p>  setColor、setColors方法</p><p>  用setColor、setColors方法向GeometryArray類的對(duì)象中添加顏色值。public Color3f(float x,float y,float z)方法是Color3f類的一個(gè)構(gòu)造函數(shù),該構(gòu)造函數(shù)通過(guò)設(shè)置R、G和B三個(gè)分量的值表示一種顏色。三個(gè)分量的值都必須在0.0~1.0之間。Color3f類對(duì)象的創(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表示藍(lán)顏色值。</p><p>  setColor(int index,Color3f[] color)方法設(shè)置在index處點(diǎn)的顏色值,C

55、olor3f與Point3f類似,用三個(gè)浮點(diǎn)表示一種顏色組合,每個(gè)浮點(diǎn)數(shù)的值都在0.0~1.0。</p><p>  setColors(int index,float[] colors)方法對(duì)從index開(kāi)始到index+length個(gè)點(diǎn)賦新值。</p><p><b>  2.4.2點(diǎn)的生成</b></p><p>  點(diǎn)由javax.me

56、dia.j3d.Geometry包中的PointArray類來(lái)定義。PointArray的第一個(gè)構(gòu)造函數(shù):public PointArray(int vertexCount,int vertexFormat)。PointArray類是GeometryArray類的子類,因此,它繼承了GeometryArray類中定義的方法與變量。vertexCount與vertexFormat參數(shù)的含義與GeometryArray類中含義相同。<

57、/p><p>  PointAttributes類的對(duì)象用來(lái)點(diǎn)的各種屬性。點(diǎn)的屬性包括:(1)Size:定義點(diǎn)的大?。?)Antialiasing:英文含義是反走樣,當(dāng)設(shè)置一個(gè)點(diǎn)的大小大于一個(gè)像素單位時(shí),為了使點(diǎn)在顯示時(shí)接近于一個(gè)圓形,則需要設(shè)置該參數(shù)。</p><p><b>  2.4.3線的生成</b></p><p>  LineArray

58、(int vertexCount,int vertexFormat)構(gòu)造函數(shù):應(yīng)用相關(guān)參數(shù)創(chuàng)建一個(gè)空的LineArray類的對(duì)象。</p><p>  vertexCount:表示生成多段直線段的點(diǎn)的總數(shù)。vertexFormat:表示這些點(diǎn)的格式。與 GeometryArray類中的參數(shù)相同。用這種方式定義的線段是不連續(xù)的。</p><p>  LineAttributes類的對(duì)象定義所

59、有與線的顯示相關(guān)的屬性域狀態(tài)。構(gòu)造函數(shù)如下</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:是否打開(kāi)反走樣標(biāo)志。</p><p>  setLineWidth(float lineWidth):改變線寬</p><p>  setLinePattern(in

61、tlinePattern):改變線型</p><p>  setLineAntialiasingEnable(boolean state):打開(kāi)或關(guān)閉反走樣</p><p><b>  線類型定義</b></p><p>  它能夠定義線條的線型。Pattern的線類型包含如下幾種:</p><p>  PATTERN_

62、SOLID:用序號(hào)0表示,定義線類型為實(shí)線。</p><p>  PATTERN_DASH:用序號(hào)1表示,定義線類型為虛線。</p><p>  PATTERN_DOT:用序號(hào)2表示,定義線類型為點(diǎn)線。</p><p>  PATTERN_DASH_DOT: 用序號(hào)3表示,定義線類型為點(diǎn)劃線。</p><p>  PATTERN_USER_D

63、EFINED: 定義用戶自定義的線類型。</p><p>  setLinePattern(int linePattern)設(shè)置LineAttributes 類的對(duì)象中的線型參數(shù)。</p><p><b>  反走樣屬性定義</b></p><p>  setLineAntialiasingEnable(boolean state)設(shè)置Line

64、Attributes類的對(duì)象中的反走樣變量。 參數(shù)state 的取值為true或false。 True表示打開(kāi)反走樣開(kāi)關(guān), false表示關(guān)閉。</p><p><b>  線寬設(shè)計(jì)</b></p><p>  setLineWidth(float lineWidth)設(shè)置lineAttributes類的對(duì)象中的線寬。</p><p>  2.

65、4.4 Java 3D程序Shape 3D類對(duì)象中幾何元素的定義</p><p>  Shape 3D是一種葉子節(jié)點(diǎn)類。在該節(jié)點(diǎn)中定義了一個(gè)幾何對(duì)象元素的列表和一個(gè)唯一的外觀屬性元素對(duì)象,該幾何對(duì)象元素列表包含了在Shape 3D中定義的所有幾何對(duì)象元素,這些幾何對(duì)象元素在該列表中的排列順序?yàn)椋?、1、2 ……。一個(gè)Shape 3D的對(duì)象包含了一個(gè)或多個(gè)幾何元素對(duì)象和唯一的外觀元素對(duì)象。幾何對(duì)象定義形狀節(jié)點(diǎn)的幾何

66、數(shù)據(jù)。外觀定義幾何對(duì)象的外觀屬性,如顏色、材質(zhì)和紋理等。Shape 3D類的重要方法如下:</p><p>  addGeometry(Geometry geometry):向Shape 3D節(jié)點(diǎn)的幾何元素列表中增加參數(shù)指定的幾何元素。</p><p>  setAppearance(Appearance appearance):設(shè)置整個(gè)Shape 3D節(jié)點(diǎn)的外觀屬性元素。</p&g

67、t;<p>  setGeometry(Geometry geometry):用參數(shù)指定的幾何元素替換Shape 3D節(jié)點(diǎn)的幾何元素列表中index=0處的幾何元素。</p><p>  2.5 Appearance類</p><p>  Appearance類的對(duì)象定義所有的顯示狀態(tài)。所有的這些狀態(tài)都分別作為一個(gè)Shape 3D節(jié)點(diǎn)的元素對(duì)象。顯示狀態(tài)包含的內(nèi)容如下:<

68、;/p><p> ?。?)顏色屬性:用一個(gè)ColoringAttributes類的對(duì)象定義顏色。</p><p> ?。?)線的屬性:定義與線相關(guān)的屬性如線型、線寬、是否使用反走樣。用一LineAttributes類的對(duì)象定義。</p><p> ?。?)點(diǎn)的屬性:定義點(diǎn)大小及是否應(yīng)用反走樣。用PointAttributes類的對(duì)象定義。</p><

69、p>  (4)材質(zhì):定義一個(gè)物體在光照情況下的外觀,如環(huán)境光顏色,散射光顏色、鏡面反射光顏色、發(fā)射光顏色和光亮度。用Material類的對(duì)象定義。</p><p>  (5)紋理:定義紋理圖像和過(guò)濾參數(shù)。通過(guò)Texture類的對(duì)象定義。紋理屬性:定義與紋理影射有關(guān)的參數(shù)。用TextureAttributes類的對(duì)象定義。</p><p>  Appearance類的構(gòu)造函數(shù)與方法&l

70、t;/p><p>  Appearance app=new Appearance();</p><p>  1.setColoringAttributes(ColoringAttributes coloringAttributes)設(shè)置ColoringAttributes的對(duì)象到Appearance類的對(duì)象中。</p><p>  2.setLineAttributes

71、(LineAttributes lineAttributes) 設(shè)置LineAttributes的對(duì)象到Appearance類的對(duì)象中。</p><p>  3.setMaterial(Material material) 設(shè)置Material的對(duì)象到Appearance類的對(duì)象中。</p><p>  4. setPointAttributes(PointAttributes point

72、Attributes) 設(shè)置PointAttributes的對(duì)象到Appearance類的對(duì)象中。</p><p>  5. setTexture(Texture texture) 設(shè)置Texture的對(duì)象到Appearance類的對(duì)象中。</p><p>  6. setTextureAttributes(TextureAttributes textureAttributes) 設(shè)置Te

73、xtureAttributes的對(duì)象到Appearance類的對(duì)象中。</p><p>  2.6 Material類</p><p>  Material類的對(duì)象定義一個(gè)三維物體在光照情況下的外觀。如果在一個(gè)Appearance類的對(duì)象中Material類的對(duì)象為null,則光照效果對(duì)所有包含該Appearance類的對(duì)象的節(jié)點(diǎn)不起作用。</p><p>  在M

74、aterial類中設(shè)置的屬性如下:</p><p>  環(huán)境光顏色:包含紅綠藍(lán)三色,顏色取值范圍為0.0~1.0。</p><p>  散射光顏色:當(dāng)光照射時(shí),物體材質(zhì)表現(xiàn)出的紅綠藍(lán)顏色,顏色取值范圍為0.0~1.0。</p><p>  鏡面反射光顏色:在光照下,物體的鏡面反射的紅綠藍(lán)顏色,顏色取值范圍為0.0~1.0。</p><p> 

75、 物體的發(fā)亮特性:表示物體的光亮程度,取值范圍[1.0,128.0]。 </p><p>  Material類的相關(guān)方法如下:</p><p>  setEmissiveColor(float r,float g,float b)方法設(shè)置放射光,用r,g,b為紅綠藍(lán)顏色分量設(shè)置環(huán)境光顏色。</p><p>  setDiffuseColor(float r,fl

76、oat g,float b)方法設(shè)置放射光,用r,g,b為紅綠藍(lán)顏色分量設(shè)置散射光顏色。</p><p>  setShininess(float shininess),設(shè)置發(fā)亮值。</p><p>  2.7 Light類</p><p>  Light類葉子節(jié)點(diǎn)是一個(gè)抽象類,其中定義的一組參數(shù)屬于所有類型的光。這些參數(shù)包括光顏色,光照開(kāi)關(guān)標(biāo)志,和一個(gè)光的作用范圍

77、。</p><p>  在一個(gè)場(chǎng)景中的光可能包含有多個(gè)獨(dú)立定義的光源。光源的類型包括:平行光源DirectionalLight,點(diǎn)光源PointLight和AmbientLight。</p><p><b>  相關(guān)方法</b></p><p> ?。?)setEnable(boolean state)設(shè)置光的開(kāi)關(guān)。state為true時(shí)表示光

78、開(kāi)。</p><p> ?。?)setColor(Color3f color)設(shè)置光的顏色</p><p> ?。?)setInfluencingBounds(Bounds bounds)設(shè)置光照范圍</p><p><b>  3 基本形體</b></p><p>  Java 3D在com.sun.j3d.utils

79、包中定義好的基本形體包括:長(zhǎng)方體、圓柱體、圓錐體和球體。這些定義好的形體在某些應(yīng)用中可直接使用。</p><p>  3.1長(zhǎng)方體Box類</p><p>  Box(float xdim,float ydim,float zdim,Appearance app)構(gòu)造函數(shù),用指定的外觀屬性app創(chuàng)建一個(gè)中心位于坐標(biāo)原點(diǎn)的三維長(zhǎng)方體。長(zhǎng)方體的長(zhǎ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的圓柱體。圓柱體的中心位于原點(diǎn),圓柱體的中心軸與y軸重合</p><p>  3.3圓錐體Cone類</p><p>  

81、Cone(float radius,float height,int primflags,Appearance app)用指定的primflags參數(shù)與app外觀屬性生成底面半徑為radius,高位height的圓錐體。圓錐體的中心位于原點(diǎn),中心軸與y軸重合</p><p>  3.4球體Sphere類</p><p>  Sphere(float radius,int primflags

82、,int divisions,Appearance app) 用指定的primflags參數(shù)與app外觀屬性生成半徑為radius的球。球的中心位于原點(diǎn)</p><p><b>  4 坐標(biāo)變換</b></p><p>  4.1Transform3D類</p><p>  Transform3D類主要功能是實(shí)現(xiàn)對(duì)幾何元素的坐標(biāo)變換。</

83、p><p><b>  1.構(gòu)造函數(shù)</b></p><p>  Transform3D t=new Transform3D();</p><p>  創(chuàng)建一個(gè)新的Transform3D類的對(duì)象,該對(duì)象表示一個(gè)4*4的坐標(biāo)變換矩陣,該坐標(biāo)變換矩陣是一個(gè)單位矩陣。</p><p><b>  2.方法</b&g

84、t;</p><p>  rotX(double angle)使圖形繞X軸逆時(shí)針旋轉(zhuǎn)一個(gè)角度.</p><p>  rotY(double angle)使圖形繞Y軸逆時(shí)針旋轉(zhuǎn)一個(gè)角度.</p><p>  rotZ(double angle)使圖形繞Z軸逆時(shí)針旋轉(zhuǎn)一個(gè)角度.</p><p>  setScale(double scale)設(shè)置

85、變比變換系數(shù),在X、Y、Z軸三個(gè)方向相同</p><p>  setScale(Vector3d scale) 設(shè)置變比變換系數(shù),分別設(shè)置在X、Y、Z軸三個(gè)方向的變比變換系數(shù)。</p><p>  setTranslation(Vector3f trans)用trans中的三個(gè)分量設(shè)置對(duì)圖形的一種平移變換。</p><p>  4.2 TransformGroup類

86、與Transform3D類之間的關(guān)系</p><p>  一個(gè)Transform3D對(duì)象表示對(duì)幾何體的坐標(biāo)平移、旋轉(zhuǎn)、變比等坐標(biāo)中的一種,多個(gè)Transform3D對(duì)象的組合形成一個(gè)總的坐標(biāo)變換矩陣。</p><p>  所有表示各種幾何變換的Transform3D對(duì)象包含在一個(gè)Transform類的對(duì)象中,表示對(duì)空間三維物體所進(jìn)行的各種坐標(biāo)變換的組合,如果表示一種幾何變換Transfor

87、m3D的對(duì)象沒(méi)有加入到該TransformGroup類的對(duì)象中,則該變換對(duì)三維物體不起作用。</p><p>  也可一次定義一個(gè)總的坐標(biāo)變換矩陣,并創(chuàng)建一個(gè)Transform3D對(duì)象,將該Transform3D對(duì)象加入到TransformGroup類的對(duì)象中</p><p>  也可以分步定義多個(gè)不同類型的坐標(biāo)變換矩陣,然后依次創(chuàng)建多個(gè)Transform3D對(duì)象,將這些Transform

88、3D對(duì)象一次加入TransformGroup類對(duì)象中,則以Transform3D的加入次序一次對(duì)物體進(jìn)行變換。</p><p>  如果在一個(gè)TransformGroup節(jié)點(diǎn)中沒(méi)有定義任何的坐標(biāo)變換,也就是沒(méi)有加入任何的Transform3D對(duì)象,則該TransformGroup節(jié)點(diǎn)擁有默認(rèn)的4*4坐標(biāo)變換矩陣,但該矩陣為單位矩陣,表示對(duì)幾何體不進(jìn)行任何幾何變換。</p><p>  5

89、動(dòng)畫(huà)編程基礎(chǔ)介紹</p><p><b>  5.1鼠標(biāo)交互</b></p><p>  Java 3D中提供了鼠標(biāo)交互的工具類com.sun.j3d.util.behaviors.</p><p>  MouseBehavior,利用這個(gè)工具類,可以方便的實(shí)現(xiàn)對(duì)鼠標(biāo)事件的響應(yīng)。MouseBehavior是Behavior的子類,是一個(gè)抽象類,

90、包括MouseRotate,</p><p>  MouseZoom,MouseTranslate3各子類,分別可以通過(guò)鼠標(biāo)的左中右鍵實(shí)現(xiàn)對(duì)幾何形體的旋轉(zhuǎn),縮放,平移。</p><p>  與鼠標(biāo)行為交互相關(guān)的還有一個(gè)接口MouseBehaviorCallback,這個(gè)接口提供了一個(gè)TransformChanged方法,當(dāng)鼠標(biāo)交互改變了坐標(biāo)系時(shí),將會(huì)調(diào)用這個(gè)方法。而MouseRotate,

91、MouseZoom,MouseTranslate都實(shí)現(xiàn)了這個(gè)接口,因此可以重載這個(gè)方法來(lái)實(shí)現(xiàn)一些效果。</p><p><b>  5.2鍵盤(pán)交互</b></p><p>  Java 3D中提供了鍵盤(pán)交互的工具類com.sun.j3d.util.behaviors.</p><p>  Keyboard.KeyNavigatorBehavio

92、r,它也是Behavior的子類。</p><p><b>  5.3 Alpha</b></p><p>  動(dòng)畫(huà)研究的核心內(nèi)容之一就是研究幾何形體如何在空間和時(shí)間中運(yùn)動(dòng)。Java 3D中給出了一系列的內(nèi)插器,可以方便的用于動(dòng)畫(huà)制作。各種內(nèi)插器的使用和Alpha類密不可分,內(nèi)插器定義了幾何形體如何在空間做運(yùn)動(dòng),而Alpha定義了幾何形體運(yùn)動(dòng)的時(shí)間控制,它們結(jié)合起來(lái)就

93、可以編寫(xiě)簡(jiǎn)單的三維動(dòng)畫(huà)。</p><p> ?。?)Alpha對(duì)象提供了動(dòng)畫(huà)的時(shí)間控制,一個(gè)循環(huán)周期分為5段,包括:</p><p>  1.起始延時(shí)時(shí)段:phaseDelay Duration</p><p>  2.上升時(shí)段:increasingAlphaDuration</p><p>  3.高位時(shí)段alphaAtOneDuratio

94、n</p><p>  4.下降時(shí)段decreasingAlphaDuration</p><p>  5.底位時(shí)段alphaAtZeroDuration</p><p>  可以對(duì)每個(gè)時(shí)段指定所占用的時(shí)間,例如上升時(shí)段占用了一個(gè)周期的時(shí)間,那么幾何形體將從初始位置變化到終點(diǎn)位置,然后跳回初始位置,重復(fù)上述動(dòng)作。用不同的組合方式,還可以產(chǎn)生多種不同的運(yùn)動(dòng),</

95、p><p>  Alpha的構(gòu)造函數(shù):</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)次數(shù);表示對(duì)象每一周期的運(yùn)行方式,參數(shù)phas

97、eDelay Duration,increasingAlphaDuration,</p><p>  alphaAtOneDuration,decreasingAlphaDuration,alphaAtZeroDuration與Alpha的循環(huán)周期的5段一一對(duì)應(yīng),increasingAlphaRampDuration,decreasingAlphaRampDuration為變化的加速度和反加速度,可以控制變化的速

98、度。</p><p><b>  5.4自定義行為</b></p><p>  自定義行為也必須是Behavior類的子類。擴(kuò)展Behavior類,在構(gòu)造器中指明要變幻的對(duì)象,還需要覆蓋initialize()方法和processStimulus()方法。在initialize()方法中設(shè)置行為的觸發(fā)條件,例如定時(shí)器﹑鼠標(biāo)事件和鍵盤(pán)按鍵事件等。具體的行為內(nèi)容在方法pr

99、ocessStimulus()中,例如可以修改幾何形體﹑坐標(biāo)系或觸發(fā)其他行為等。</p><p>  5.5 Morph類</p><p>  Java3D中Morph類可以將GeometryArray類型的幾何形體的頂點(diǎn)在多個(gè)頂點(diǎn)數(shù)組之間變形。從本質(zhì)上說(shuō),Morph并不是一個(gè)內(nèi)插器,而是一個(gè)行為。因此它需要擴(kuò)展Behavior類,并且覆蓋initialize方法和processStimu

100、lus方法。</p><p>  Morph類有以下兩種構(gòu)造器:</p><p>  Morph(GeometryArray[] geometry Arrays)</p><p>  Morph(GeometryArray[] geometry Arrays , Appearance appearance)</p><p>  其中,geom

101、etryArrays為GeometryArray類型的數(shù)組,這個(gè)數(shù)組可以是GeometryArrays類型的也可以是它的子類例如TrangleArray, QuadStripArray和IndexedLineStripArray等,但是在同一個(gè)數(shù)組中,元素的類型必須相同。</p><p>  Appearance 為這個(gè)幾何形體的外觀。</p><p>  Morph中幾何形體的變化是通過(guò)

102、weight數(shù)組來(lái)控制的,weight中數(shù)組的元素對(duì)應(yīng)頂點(diǎn)數(shù)組,例如weight[0]表示其實(shí)點(diǎn)的頂點(diǎn)數(shù)組,weight[n]表示變化終點(diǎn)的頂點(diǎn)數(shù)組。Weight中元素的數(shù)值在0~1之間變化,其意義就是變化的程度。</p><p>  6 Bezier曲線介紹</p><p>  Bezier曲線定義 </p><p>  給定n+1個(gè)控制頂點(diǎn)Pi(i=0~n) ,

103、則Bezier曲線定義為: </p><p>  P(t)=∑Bi,n(t)Pi ,t∈[0,1] </p><p>  其中:Bi,n(t)稱為基函數(shù)。 </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曲線性質(zhì)</p><p><b> ?。?)端點(diǎn)性質(zhì): </b></p><p>  a)P(0)=P0, P(1)=Pn, 即:曲線過(guò)二端點(diǎn)。 </p><p>  b)P’(0)=n(P1-P0), P’(1)=n(Pn-Pn-1) </p><p>  即:在二端點(diǎn)與控制多邊形相切。 </p>

105、<p>  (2)凸包性:Bezier曲線完成落在控制多邊形的凸包內(nèi)。 </p><p> ?。?)對(duì)稱性:由Pi與Pn-i組成的曲線,位置一致,方向相反。 </p><p> ?。?)包絡(luò)性:Pn(t)=(1-t)Pn-1(t)+tPn-1(t) </p><p>  在CAD/CAM中,常采用Bezier曲線曲面,這樣便于理解曲線/曲面。但采用Bez

106、ier形式的曲線曲面不能精確的表示二次曲線和二次曲面,如球體和圓。將多項(xiàng)式改為有理形式,不僅能精確表示二次曲線和二次曲面,且增加了設(shè)計(jì)的自由度。重復(fù)的進(jìn)行兩點(diǎn)線性插值,可以構(gòu)造Bezier Curve。重復(fù)的進(jìn)行兩點(diǎn)有理插值,可以構(gòu)造有理Bezier Curve。 </p><p>  與控制頂點(diǎn)類似,有理Bezter曲線上的點(diǎn)可映射為Bezter曲線上的點(diǎn)或?qū)?yīng)的控制多邊形上的點(diǎn)。在透視投影使用理形式與非有理形

107、式產(chǎn)生相同投影時(shí),有理Besier曲線曲面和有理B樣條曲線曲面繼承了Bezier曲線曲面和B樣條曲線曲面的簡(jiǎn)單、優(yōu)美的特性。這種形式,數(shù)學(xué)上的分析及幾何特性的掌握了解都比其他4D空間(wx、wy、wz、w)方法和單純的3D空間有理形式要簡(jiǎn)單和容易。 </p><p>  現(xiàn)在,有理曲線曲面不僅僅用于表示和構(gòu)造二次曲線曲面。對(duì)有理曲線曲面的權(quán)因子該如何選取往往不很清楚,而且有理形式的計(jì)算比非有理形式復(fù)雜,但是,由于

108、其構(gòu)造特性,現(xiàn)在人們已經(jīng)開(kāi)始考慮有理Bezter和有理B樣條曲線曲面的應(yīng)用。</p><p>  Bezier曲線、曲面的拼接</p><p>  要設(shè)計(jì)復(fù)雜的Bezier曲線,就要將單段的Bezier曲線拼接起來(lái)。同樣,要設(shè)計(jì)復(fù)雜的Bezier曲面,需要將多個(gè)單片Bezier曲面拼接起來(lái)。</p><p>  這里首先介紹曲線、曲面在拼接時(shí)的連續(xù)性問(wèn)題。</

109、p><p> ?。?) 曲線、曲面拼接的連續(xù)性</p><p>  C0連續(xù)(零階參數(shù)連續(xù)):第一段曲線的終點(diǎn)與第二段曲線的起點(diǎn)位置重合。</p><p>  C1連續(xù)(一階參數(shù)連續(xù)):兩相拼接的曲線在拼接點(diǎn)處重合,在拼接點(diǎn)處有相同的一階導(dǎo)數(shù)。</p><p>  C2連續(xù)(二階參數(shù)連續(xù)):兩相拼接的曲線在拼接點(diǎn)處重合,在拼接點(diǎn)處有相同的一階導(dǎo)數(shù)

110、和二階導(dǎo)數(shù)。</p><p>  G0連續(xù)(零階幾何連續(xù)):第一段曲線的終點(diǎn)與第二段曲線的起點(diǎn)位置重合,稱為G0連續(xù),同時(shí)也是C0連續(xù)。</p><p>  G1連續(xù)(一階幾何連續(xù)):兩相拼接的曲線段在拼接點(diǎn)處重合,切線方向相同,但大小不等,則這種連續(xù)稱為G1連續(xù)。</p><p>  G2連續(xù)(二階幾何連續(xù)):兩相拼接的曲線段在拼接點(diǎn)處重合,在拼接點(diǎn)處G0連續(xù),G

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論