SINTAK UMUM
-
setiap fail VRML mesti bermula dengan #VRML V1.0 ascii.Sebarang aksara
atau karaktor selepasnya adalah diabaikan.
-
Aksara '#' adalah permulaan komen dan semua akasara atau karaktor sehingga
baris yang baru adalah diabaikan.
-
Selepas header , fail VRML hanya mengandungi satu VRML node.Node tersebut
mungkin satu kumpulan node yang mengandungi sebarang nombor dari node lain.
SISTEM KOORDINAT
VRML menggunakan sistem koordinat cartesian , right-handed dan 3-dimensi.
Objek dibahagikan kepada 2-dimensi iaitu paksi X positif dan paksi Y positif.
Unit piawaian untuk panjang dan jarak adalah menggunakan meter dan unit
piawaian untuk sudut pula adalah dalam radian.
MEDAN
Ada dua jenis medan yang umum iaitu medan yang mengandungi satu nilai
dan medan yang mengandungi banyak nilai.Medan yang mengandungi satu nilai
mempunya nama yang bermula dengan " SF " manakala untuk medan yang banyak
nilai ditulis sebagai " MF".
Terdapat pelbagai jenis medan yang mengandungi satu nilai iaitu :
Node yang menggunakan medan ini menakrifkan nama mnemonic untuk bit flags.
Medan yang mengandungi satu nilai boolean.SFBool mungkin ditulis sebagai
0 [FALSE] dan 1 [TRUE atau FALSE].
Satu nilai medan yang mengandungi warna yang ditulis di dalam fail sebagai
RGB dalam jujukan 0.0 kepada 1.0
Satu nilai medan yang mengandungi nilai berjenis 'enumerated'.Node yang
menggunakan medan berjenis ini menakrifkan mnemonic untuk nilainya.SFEnum
ditulis sebagai nama yang berjenis 'mnemonic enumerated'Nama tersebut berbeza
penggunaannya dalam setiap kelas node.
Medan yang mengandungi satu nombor berjenis float dan ditulis dalam piawaian
notasi saintifik.
Medan yang mengandungi warna 2 dimensi atau imej yang kelabu.SFImage ditulis
sebagai 3 integer iaitu lebar , tinggi dan nombor komponen dalam imej diikuti
nilai heksadesimel lebar * tinggi yang menghasilkan piksel dalam imej tersebut.Piksel
dalam tiga komponen imej mempunyai komponen merah dalam bit yang pertama
diikuti dengann komponen hijau dan biru.Nilai heksadesimel yang pertama
adalah piksel sebelah kiri yang rendah bagi imej tersebut manakala nilai
terakhir pula ialah piksel disebelah kanan yang paling atas sebagai contoh
1 2 1 0xFF 0x00 adalah luas satu piksel disamping tinggi dua piksel imej
kelabu dengan piksel putih dibawah dan piksel diatas adalah hitam.
Medan yang mengandungi satu integer panjang (32 bit ) yang ditulis sebagai
integer dalam desimel , heksadesimel (bermula dengan '0x') atau format
oktal (bermula dengan '0') .
Medan yang mengandungi penukaran matriks.Ia ditulis dalam jujukan 'row-major'
sebagai 16 nombor floating point dijarakkan dengan satu ruang kosong.Sebagai
contoh matriks yang menterjemahkan 7.3 units disepanjang paksi X ditulis
sebagai :
SFRotation
Medan yang mengandungi putaran secara rambang dan ditulis dalam empat nilai
floating point yang dijarakkan dengan ruang kosong.Empat nilai tersebut
menghasilkan putaran paksi diikuti dengan jumlah putaran mengikut arah
jam dalam radian.Sebagi contoh putaran 180 darjah pada paksi Y ialah
SFString
Medan yang mengandungi ASCII string.Ditulis dalam jujukan aksara ASCII
dalam "".Sebarang aksara (termasuk baris baru) mungkin wujud tanpa tanda
tersebut.Untuk memasukkan tanda "" tanpa string mulakannya dengan \ (blackslash).Sebagi
contoh :
"One ,Two ,Three"
"He said , \" Immel did it! \ ""
Medan yang mengandungi vektor 2-dimensi dan ditulis sebagai sepasang nilai
floating point yang diasingkan dengan ruang kosong.
Medan yang mengandungi vektor 3-dimensi dan ditulis sebagai tiga nilai
floating point yang dijarakkan dengan ruang kosong.
Medan 'multiple-value' yang mengandungi sebarang nombor warna RGB.Ditulis
sebagai satu atau banyak nombor RGB berjenis float dalam bentuk piawaian
saintifik.Apabila lebih dari satu nilai ditulis , semua nilai tersebut
mesti ditutup dengan [ ] dan diasingkan dengan tanda koma seperti contoh
dibawah yang menghasilkan warna merah , hijau dan biru.
[1.0 0.0 0.0 , 0 1 0, 0 0 1]
Medan yang mengandungi sebarang nombor integer long ( 32 bit ).Ditulis
sebagai satu atau leebih nilai integer dalam bentuk desimel , heksadesimel
atau format oktal.Apabila lebih dari satu nilai ditulis ,semua nilai ditutup
dengan [ ] dan diasingkan dengan koma seperti :
[17, -0xE20, -518820 ]
Medan yang mengandungi sebarang nombor vektor 2-Dimensi.Ditulis sebagai
satu atau banyak pasangan nilai berjenis float yang diasingkan dengan ruang
kosong.Apabila lebih dari satu nilai ditulis , semua nilai ditutup dengan
[ ] dan diasingkan dengan koma seperti :
[0 0, 1.2 3.4 , 6 -4e1]
Medan yang mengandungi sebarang nombor vektor 3 dimensi.Ditulis sebagai
satu atau lebih nilai berjenis float yang diasingkan dengan ruang kosong.Apabila
lebih dari satu nilai ditulis , maka semua nilai perlu ditutup dengan [
] dan diasingkan dengan koma seperti :
[ 0 0 0, 1.2 3.4 5.6, 98.6 -4e1 212]
NODES
VRML menakrifkan beberapa kelas nodes yang berbeza.Nodes mungkin mengandungi
kosong atau lebih medan dan setiap jenis node menakrifkann jenis,nama dan
nilai bagi setiap medan.Nilai bagi setiap medan digunakan sekiranya nilai
untuk medan tidak dikhususkan dalam fail VRML.Cara medan node dibaca adalah
tidak penting sebagai contoh ; "Cube { width 2 height 4 depth 6 } dan "Cube
{ height 4 depth 6 width 2 } adalah sama. Sebahagian nodes boleh dikelaskan
kepada salah satu daripada tiga kategori seperti di bawah :
-
Shape
-
menakrifkan bentuk geometri dalam scene.
-
kumpulan yang terdapat di bawah node shape ialah Ascii , Cone , Cube
, Cylinder , IndexedFaceSet , IndexedLineSet , PointSet , Sphere
-
Property
-
kesan kepada cara sesuatu bentuk dilukis
-
kumpulan yang ada di bawah node property ialah LOD , Material , MaterialBinding
, Normal , NormalBinding , Texture2 , Texture2Transform , TextureCoordinate2
, ShapeHints , MatrixTransform , Rotation , Scale , Transform , Translation
, OrthographicCamera , PerspectiveCamera , DirectionalLight , PointLight
dan SpotLight.
-
Group
-
menghimpun nodes yang berlainan
-
membenarkan nodes yang telah dikumpul dijadikan sebagai satu objek
-
Sebahagian node group juga mangawal anak node
-
kumpulan yang ada dalam node group ialah Group , Separator , Switch
, TransformSeparator , WWWAnchor
-
Nodes WWWInline tidak termasuk dalam mana-mana kategori diatas
Format Fail :
WWWInline {
name
" " # SFString
bboxSize
0 0 0 # SFVec3f
bboxCenter
0 0 0 # SFVec3f
}
INSTANCING
Nodes mungkin terdiri daripada lebih dari satu kumpulan yang dipanggil
'instancing ' dan cara untuk mencapainya adalah menggunakan katakunci "
USE ".
Kedua-dua katakunci DEF menakrifkan node untuk nama dan mereka satu
instance baginya.Katakunci USE menunjukkan bahawa instance sepatutnya digunakan
semula.DEF / USE adalah terhad kepada satu fail dan tiada mekanisma untuk
node USE'ing yang menunjukkan DEF'ed dalam fail yang lain.
Contoh dibawah akan menghasilkan tiga sfera dan kedua-dua sfera diberi
nama 'Joe' ; sfera yang kedua dilukis dua kali :
Separator {
DEF Joe Sphere { }
Translation { translation 2 0 0 }
Separator {
DEF Joe Sphere { radius .2 }
Translation { translation 2 0 0 }
}
USE Joe # radius .2 sphere
will be used here
}
PENYAMBUNG
Sambungan kepada VRML adalah disokong dengan sokongan node 'self-describing'.Node
yang bukan sebahagian dari piawai VRML mesti ditulis luar dari penerangan
medan yang pertama , maka semua penterjemahan VRML adalah perlu untuk dihuraikan
dan sambungan pula diabaikan.
Penerangan tersebut ditulis selepas pembuka curly-brace untuk node tersebut
dan terdiri daripada katakunci medan diikuti senarai jenis dan nama medan
yang digunakan oleh node tersebut.Semua senarai tersebut ditutup dengan
[ ] dan diasingkan dengan tanda koma.Sebagai contoh , sekiranya CUBE bukan
piawai node VRML maka ia perlu ditulis seperti dibawah :
Cube {
medan [SFFloat width , SFFloat height , SFFloat
depth ]
width 10 heoght 4 depth 3
}