VRML 1.0 規格


[ VRML語言概念 | VRML座 標系統 | 參數場與物件 ]

VRML的原版 1.0 規格書可在這裡找到.

VRML語言概念

簡單來講, VRML是各種物件(node)所組成的. 理論上, 這些物件可以 是任何東西 -- 3D 幾何平面, MIDI資訊, JPEG影像, 動畫檔等. VRML定義了一些物件, 可以 很方便用來描述 3D 的物體以及網路連結.

VRML將物件以階層式的結構來安排, 稱之為場景圖 (scene graphs). 場景 圖不僅只是一些物件集合在一起而已, 它更定義了這些物件的順序. 在一個場景中, 排 在前面的物件可以影響排在後面的物件. 舉例來說, 一個旋轉(Rotation) 或是材質 (Material) 的物件會影響在它之後的物件, 使它以某個角度 或是某種材質呈現出來; 分離 (Separator)物件可以用來限制影響的範圍, 如此一來, 場景中的物件就會一組一組的分割開來了.

一個物件(node)有下列的內容:

  • 物件的種類

    一個物件可能是一個立方體, 球體, 材質貼圖, 轉換運算等.

  • 物件中所需的參數

    舉例來說, 每一個圓球(Sphere)物 件可能會有不同的半徑, 材質貼圖物件也可以是不同的影像. 這些參數就稱為參數場 (Fields). 一個物件可以有許多的參數場.

  • 物件的名稱

    給一個物件名稱是很有用的; 在一個場景內, 名稱可以提示這 裡有什麼. 物件不一定要有名稱, 若是有, 就必須是唯一一個名稱.

  • 物件的子物件.

    一個物件允許包含其他的物件, 這就是階層式. 物件又包含 子物件稱為群物件(group nodes). 一個群物件可以有零到多個子物件.

在VRML中的語法如下.

DEF objectname objecttype { fields children }
物件名稱 物件種類 參數場 子物件 在定義一個物件時, 只有物件的種類和大括弧是一定要有的; 其它像是物件名稱(objectname), 參數場(fileds), 和子物件(children)都是不一定要有的.

舉一個例子, 下面的檔案描述一個簡單的場景, 其中有一個紅色的球, 藍色的立方體, 並 且有一個光源照著:

[原始碼]

一般的語法

  • 為了要簡單的定義 VRML 檔案, 每一個 VRML 檔案的第一行都必須寫:

    #VRML V1.0 ascii

  • 每一行的結束是用換行 (newline) 或是 Carriage return 字元來控制.

  • '#' 表示之後是註解; 在它之後的每一個字都會被忽略, 一直到換行或是 Carriage return 字元. 唯一的例外是在字串參數場 (string fields) 中, '#' 是字串的一部份.

    注意: 註解和空白可能不會被保留; 特別是一個VRML文件的伺服器可能會在傳輸一個文 件之前, 先把註解文字和多餘的空白除掉而不傳送. 我們也應該使用一個訊息物件(Info node)來說明一些資訊, 好像是著作權, 或是作者資料等.

  • 空白, tabs, 換行和 Carriage returns 都算是空白字元 (除了在字串參數場之內例外).

  • 在檔案表頭之後, 一個 VRML 檔案只包含一個 VRML 物件. 而在這個物件內, 可以包含任 何數目的物件 .

  • VRML 會分辨字母的大小寫; 'Sphere' 和 'sphere' 是兩個不同的東西.

  • 物件名稱不能以數字開頭, 也不能包含空白, 控制字元, 單或雙引號( ' " ), 反斜線( \ ), 大括弧( { } ), 井字號( # ), 加號( + ), 或是句點( . ).

  • 參數場的名稱以小寫字母開頭, 物件是以大寫字母開頭. 其它的部份除了大括弧( { } ), 中括弧( [ ] ), 單或雙引號( ' " ), 井字號( # ), 反斜線( \ ), 加號( + ), 和句點( . )不能使用外, 可用任何可印出的字元 (ASCII碼從21H到7EH).

VRML 座標系統

VRML 使用右手卡式座標系統(直角座標系統.

標準的距離和長度單位是公尺; 標準的角度單位是弧度. (3.14159 弧度約等於 180 度)

VRML 的一個場景可以包含許多個局部座標系統 (local or "object-space" coordinate systems), 這可由 Translate, Rotate, Scale, Transform, 和 MatrixTransform 物件來構成座標轉換. 例如, 給一個 空間中的點 V 和一系列的轉換:

	Translation { translateon T }
	Rotation { rotation R } 
	Scale { scaleFactor S } 
	Coordinate3 { point V } PointSet { numPoints 1}
	
V 這個點經由下列的運算順序會轉換至世界座標V'.

(若V是列向量) V'=T R S V.
(若V是行向量) V'=V S R T.


參數場與物件

參數場(Field)

一般來說,有兩種參數場;一種是只有一個參數 (參數可以是一個數字,一個向量,甚至 是一張影像),另一種就是有多個參數.單值參數場的名稱都是以 "SF"為起頭,而多 值 參數場則是以 "MF"為起頭.每一個參數場的型態定義了參數的格式. 多值參數場中的參數,是以逗號作為分隔,再以方括號括起來.如果參數場沒有參數,就 只要寫方括號 ("[]")就好了.最後一個參數後可以不寫逗號.如果參數場只有一個參數, 那方括號可以省略.例如,下列的多值參數場都是描述單一參數 1:

1
[1,]
[ 1 ]

SFBitMask一個位元旗標 (bit flags) 遮罩 (mask) 的單值場
SFBool一個布林值 (TRUE或FALSE) 的單值場
SFColor/MFColor一個 (SFColor), 零個, 或多個 (MFColor) RGB 顏色的參數場
SFEnum enumerated 型態值的單值場
SFFloat/MFFloat一個 (SFFloat) 或零個或多個 (MFFloat) 單精浮點數的參數場
SFImage未壓縮的二維彩色或灰階影像之單值場
SFLong/MFLong一個 (SFLong)或零個或多個 (MFLong) 32位元整數的參數場
SFMatrix一個轉換矩陣的單值場
SFRotation一個任意旋轉值的單值場
SFString/MFString一個 (SFString)或零個或多個 (MFString) ASCII 字串的參數場
SFVec2f/MFVec2f二維向量的參數場
SFVec3f/MFVec3f三維向量的參數場

物件(Node)

VRML定義了好多種不同的物件.大部分的物件都可分為三類:型狀 (shape),屬性 (property)或是群 (group).形狀物件定義了場景中的平面幾何.它們是真正要畫出來的 物件.屬性物件則影響形狀物件畫出來的方式.群物件可將其它的物件集合在一起,好 像是處理一個物件一樣.群物件也可以控制它的某個子物件是否要被畫出.

物件可以包含多個參數場.每一種物件的型態都定義了它的型態,名稱,和參數場的內 定值.如果沒有設定參數場的參數,就會使用參數場的內定值.物件中的參數場順序並 不重要;例如, "Cube { width 2 height 4 depth 6 }" and "Cube { height 4 depth 6 width 2 }" 都是可以的.

總共有36個物件, 其中又可以分為三大類: 形狀物件 (shape nodes), 特性物件 (properties nodes), 和組合物件(group nodes).

形狀物件

AsciiText顯示ASCII 字元集的字串, 文字
Cone圓錐體
Cube正立方體
Cylinder圓柱體
IndexedFaceSet由幾個多邊型 (polygons) 所組成的立體形狀
IndexedLineSet由多條線所組成的立體型狀
PointSet一組點
Sphere圓球體

特性物件

特性物件又可細分為幾類:

外觀幾何物件
Coordinate3定義立體座標值給 IndexFaceSet, IndexLineSet 或是 PointSet 物件使用
FontStyle定義字型給 AsciiText 物件用
Info伴隨此場景的一些資訊
LOD這個群物件可以讓物體因觀測點的遠近而自動切換不同精細度程度之模型(Level Of Detail)
Material定義物體表面材質的特性
MaterialBinding由於Material物件可以包含一個以上的材質特性, 此物件則是指定使用那個材質
Normal定義立體曲面的平面垂直向量
NormalBinding此物件指出那個垂直向量使用在那個物體表面
ShapeHints此物件說明 IndexedFaceSets 物件是否為實心, 外凸等性質
Texture2定義紋理材質圖以及其參數
Texture2Transform紋理材質座標的轉換
TextureCoordinate2定義二維座標值以對應紋理材質圖

矩陣轉換物件
MatrixTransform此物件定義一個透過 4x4 矩陣的3D幾何轉換
Rotation此物件定義一過圓點之 3D 任意旋轉
Scale此物件定義一 3D 縮放比例轉換
Transform包含旋轉, 縮放以及位移的轉換
Translation此物件定義了三維向量的位移

攝影機物件
OrthographicCamera定義一個平行投影的攝影機
PerspectiveCamera定義一個透視法投影的攝影機

光源物件
DirectionalLight有向平行光光源
PointLight固定點光源
SpotLight聚光燈光源

組合物件

Separator這個群物件可分離不同組的物件
Switch此物件可用來控制物體, 使它有不同的特性表現
WWWAnchor此物件可讀入另一個 VRML 場景

網路連結物件

WWWInline此物件可從 WWW 上讀入資料


VRML HOME VRML技術手冊
歡迎留下您寶貴的意見, 這裡是來賓留言錄.

本VRML Page是由蕭志平所維護. 上次更新時間: 1996/3/26
版權所有, 國家高速電腦中心.科學視算與互動媒體小組.