程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> X3D實戰基礎講座之六

X3D實戰基礎講座之六

編輯:關於JAVA

在X3D場景空間中,為了能夠讓浏覽者方便地控制自己的觀察位置和角度,X3D提供了視點節點Viewpoint。同時為了能以不同方式來浏覽,X3D提供了NavigationInfo導航節點。

下面就來介紹這兩個節點的使用。

一、Viewpoint節點

Viewpoint節點指明了一個X3D場景空間中的觀察位置和視角方向,其主要屬性如下表如下:

屬性 含義 默認值 使用說明 description 視點的文字描述 -- 指定的視點描述文字將出現在其快捷菜單上 position 視點位置 0 0 10 指定觀察者所在的空間位置 orientation 視點方向 0 0 1 0 前3個值是空間坐標點,該點和原點相連的線為方向軸,第4個值為旋轉角度(以弧度為單位) fieldOfView 變焦角度 0.785398 單位是弧度,取值范圍0~3.14159,小的角度相當於長鏡頭, 大的角度相當於廣角鏡頭。 jump 是否為跳轉 True 立刻轉換到這個鏡頭設置 (jump值為True), 或平滑的動態轉換到這個鏡頭(jump值為False)。該屬性可能不起作用 centerOfRotation 旋轉中心位置 0 0 0 當導航為"EXAMINE"方式時,該點為轉動中心

簡單的示例代碼如下:

說明:上面代碼是用來以不同方位觀看圓柱體。代碼中,最難理解的就是視點的位置和視角。默認時,我們的人眼是處在+Z方向,當視點位置處在圓柱體後面時,即"Back"視點,我們人眼觀察方向仍然是向裡的方向,必需由裡向外觀察才能看到圓柱體,因此我們將視角繞Y軸旋轉180度。同理可以理解Top和Left視點的設置。

結果如下圖所示。

在場景中右擊鼠標後,彈出如圖的快捷菜單,上述節點定義的視點名稱出現該菜單中,如下圖所示。

選擇Back後,場景自動動態變換,結果如下圖所示:

類似的,Top結果如下圖所示。

若將Back視點的fieldOfView屬性將原來默認的0.785398改為0.2,即:

則結果如下圖所示,注意與前面的比較。

二、導航

X3D提供NavigationInfo節點用來指定場景的觀看方式和替身的物理特征。所謂替身就是當我們在場景快捷菜單中選擇"顯示替身"則會在場景中出現一個人物造型,如下圖所示。不同的VRML浏覽器插件所提供的替身造型是有所不同的。

NavigationInfo節點屬性如下:

說明:

type用來設置在虛擬世界中導航類型和初始航行類型。type類型中共有"ANY"、"WALK"、"EXAMINE"、"FLY"和"NONE"五種選項供選擇設定。

ANY -- 任意模式。用來表示由浏覽器自動選擇對內容最合適的浏覽航行方式,並可提供用戶動態更換航行類型的用戶界面。

WALK -- 行走模式。用來指定用戶以步行的方式浏覽VRML構建的虛擬世界,或者用放置在地面上或懸浮在地面上的交通工具來在虛擬世界探索航行。

FLY -- 飛行模式。功能與WALK差不多,只是可以不用或者忽略重力或者隨地形而更換運行方向。

EXAMINE -- 檢查模式。用來從各個角度觀察個別物體的查看方式。

NONE -- 無模式用來強制用戶使用場景中提供的浏覽機制進行浏覽,可以去掉某些用不到的導航模式。

另外,BS Contact還提供平移漫游、游戲等模式。

speed用來指定用戶在虛擬世界中浏覽場景的運行速度。speed速度的數值應為非負值,當設為0時表示用戶在虛擬現實中浏覽時的位置是固定的,但不影響用戶在方向上和視野上的變化。speed屬性的設置在type類型為"NONE"時無效。

headlight用來指定浏覽器是否需要打開一個總是指向用戶注視方向的定向燈光,就像礦工頭上的燈在黑暗中行走的效果一樣。headlight屬性有兩個值,TURE為設置有效,FALSE為設置無效。

avatarSize指定用戶在VRML浏覽場景時在虛擬世界中的物理尺寸,可用於碰撞檢驗和地形隨動。默認值為[1.25,1.6,0.75],其中第一個數值1.25指定發生collision碰撞時用戶與發生碰撞物體之間的允許距離;第二個數值1.6指定用戶在虛擬世界中浏覽作品時距離地面的Height高度;第三個數值0.75指定用戶在虛擬世界中浏覽時Step跨越的高度,以便我們能夠盡可能模擬真實的人在現實世界中的攀登行為動作。

visibilityLimit能見度限制屬性用來設置用戶在虛擬世界中浏覽時能夠看見的最遠距離。數值為0時表示能看見無限遠,visibilityLimit必須大於或者等於0。

由於上述屬性均可通過屬性窗口的修改進行,因此這裡不在給出相應的代碼。值得一提的是,我們也可在場景快捷菜單中通過選擇"移動"子菜單中的命令項進行上述導航操作,其"移動"子菜單內容如下:

在下一講中,我們將討論場景的光照效果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved