ho mỏy tớnh v thc ti o Ngụn ng VRML
e1.Các nút appearrance
Khi chúng ta nhìn thấy đối tợng FBOX chúng ta đã định nghĩa trớc đây, nút Shape
có một trờng gọi là appearance, nó sử dụng để chứa trờng Appearance đợc chỉ ra dới
đây:
DEF FBOX Shape {
appearance Appearance {
material Material {
}
}
geometry Box {
}
}
Ví dụ này có một trờng bên trong nút Appearance, trờng material. Theo cách này
có các nút bên trong các nút dờng nh là khó khăn, nhng cho phép bạn định nghĩa các hình
dạng do sử dụng DEF và USE. Điều này là hiệu quả trong việc có nhiều đối tợng theo
cùng một cách quan sát. Nút Appearance có thể chứa trờng material và texture. trờng
material chứa nút Material. Nút texture chứa một trong số các loại nút kết cấu. Những
điều này đợc mô tả trong phần sau, trớc tiên chúng ta giải quytết các nút Material.
e2.Các nút Material
Nút Material có thể chứa 6 trờng, đó là:
diffuseColor
màu sắc thông thờng của đối tợng
specularColor
màu sắc nổi bật của các đối tợng chiếu sáng
emissiveColor
Đối tợng 'glows' với ánh sáng của nó từ màu sắc này, nó khôgn phải là ánh sáng mẫu từ
các đối tợng khác.
ambientIntensity
Số lợng các ánh sáng bao xung quanh mà đối tợng phản chiếu.
shininess
cách ánh xạ của đối tợng
transparency
cách làm rõ ràng đối tợng. chú ý một vài browsers không hỗ trợ các đối tợng từng phần
không rõ ràng.
Ba tham số đầu tiên là các giá trị màu, ba tham số sau là các giá trị đơn giản giữa 0
và 1. Các màu sắc đợc chỉ rõ nh các thành phần red, green và blue nh trong HTML. Bạn
có thể lấy bất kỳ màu nào bạn thích từ việc kết hợp các màu red, green và blue. Các giá trị
màu đơn lẻ nằm giữa 0( không màu) và 1(màu đầy đủ), vì vậy red đầy đủ đợc định nghĩa
Nguyn Vnh Thun CNPM K46
8
ho mỏy tớnh v thc ti o Ngụn ng VRML
là 1 0 0, trắng là 1 1 1, xám là 0.5 0.5 0.5 Cách này có thể chỉ rõ các màu trong khi sử
dụng nhng bạn có thể sử dụng bộ lựa chọn màu trong PaintShop Pro hoặc một vài thứ để
có thể nhận đợc các màu bạn thích và chuyển chúng thành giá trị VRML.
Vì vậy nếu bạn muốn tạo hình khối ban đầu, với màu xanh bán trong suốt, bạn sẽ
định nghĩa dạng của nó nh sau:
Shape {
appearance Appearance {
material Material {
emissiveColor 0 0.8 0
transparency 0.5
}
}
geometry Box {
}
}
e3,Kết cấu hình ảnh( image texture)
Các màu sắc thú vị là rất tốt nhng để trông thực sự là hấp dẫn, chúng ta phải có sơ
đồ kết cấu các vật thể. Điều này đợc thực hiện qua trờng texture của nút Appearance .
trờng này chứa ba loại nút kết cấu. Loại đầu tiên chúng ta xem xét là ImageTexture. Đây
là sơ đồ kết cấu cơ sở, ánh xạ toàn bộ hình ảnh vào một đối tợng. Nút có thể là sơ đồ kết
cấu một đối tợng với file JPEG hoặc PNG. Một vài browser có thể hỗ trợ nó, nhng đây
không phải là chuẩn. nút có thể chứa ba trờng. Đầu tiên, url chỉ rõ hình ảnh để sử dụng
chuẩn dạng URL. Bạn có thể chỉ rõ danh sách hình ảnh trong các ngoặc vuông, browser
sẽ hiển thị hình ảnh đầu tiên trong danh sách mà nó tìm thấy. Hai trờng khác là repeatS
và repeatT, thông báo liệu kết cấu lặp lại theo hớng trục ngang (S) hay trục dọc(T). Điều
này dẫn đến giá trị boolean là TRUE hoặc FALSE. chúng chỉ thực sự hiệu quả khi kết hợp
với TextureTransform, chúng ta khôg trình bày kỹ ở phần sau. Bạn có thể chỉ rõ các
thông tin trong suốt trong các hình ảnh đã sử dụng trong trờng hợp nó thay thế lại sự trong
suốt của các đối tợng ban đầu. Nếu bạn sử dụng kết cấu tỉ lệ xám, diffuseColor đợc nhân
lên với độ dày của kết cấu để tạo ra kết cấu thực sự. Thực tế, bạn có thể tạo nhiều hiệu
quả do kết hợp nút Material và ImageTexture. Nói chung, chúng chỉ thực hiện những gì
bạn mong muốn, vì vậy chỉ cần quan sát và một chút kinh nghiệm là bạn có thể tạo ra đ-
ợc.
Vì vậy để định dạng kết cấu của hộp thứ hai với kết cấu gạch, chúng ta có thể sử
dụng nh sau:
Appearance {
texture ImageTexture {
url "brick.jpg"
Nguyn Vnh Thun CNPM K46
9
ho mỏy tớnh v thc ti o Ngụn ng VRML
}
}
khi nút appearance của hộp thứ hai.
e4. Movie Texture
MovieTexture nhận lấy phim MPEG và sơ đồ kết cấu lên một đối tợng theo cách
nh ImageTexture. Nó có ba trờng giống nhau, ngoài ra có một số trờng khác, đó là:
speed
Giá trị speed mặc định là 1, 2 là tốc độ tăng 2 lần. Giá trị 0 luôn hiển thị ở cơ cấu
đầu tiên.
loop
Giá trị boolean ( (TRUE hoặc FALSE), chỉ rõ liệu phim lặp hay không.
startTime
Khi bắt đầu phim, trong một vài giây từ nửa đêm của ngày 1 tháng giêng 1970.
stopTime
Khi kết thúc phim, trong một vài giây từ nửa đêm của ngày 1 tháng giêng 1970.
e5. Pixel Texture
Nút này cho phép bạn định nghĩa các kết cấu bằng tay trong file VRML. Điều này
dờng nh khó tin là có thể đầy đủ nhng nó không có nh đã sử dụng, bạn sẽ thấy sau đây.
Nó có trờng image thay thế cho trờng URL.
Trờng image bao gồm hai con số chỉ rõ chiều rộng và cao của kết cấu, tiếp theo là
một con số chỉ rõ số lợng các thành phần. Thành phần màu sắc là tỉ lệ xám, hai thành
phần màu sắc là tỉ lệ xám với độ trong suốt, thành phần thứ ba là màu RGB và thứ t là
RGB với độ trong suốt. Sau các đối số này là danh sách các điểm pixel, là các số hexa với
một byte cho mỗi thành phần. Vì vậy pixel thành phần thứ t là red và 50 % độ trong suốt
là 0xFF00007F. Các pixel đợc sắp xếp theo thứ tự từ đáy trái đến đỉnh bên phải. Ví dụ đ-
ợc chỉ ra dới đây:
DEF PIXMAP Appearance {
texture PixelTexture {
image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFF0000
}
}
Nguyn Vnh Thun CNPM K46
10
ho mỏy tớnh v thc ti o Ngụn ng VRML
Chúng ta chỉ cần mô tả nhanh về các số hexa. Thông thờng ở máy tính thuận tiện
khi chỉ rõ các con số là các số thập phân thông thờng (0-9) hoặc nhị phân (0-1) và ngoài
ra có một loại khác là hexadecimal, có dạng nh sau:
Hexadecimal Decimal
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15
F trong số hexa là 15 trong số thập phân. 10 trong hexa là 16 trong số thập phân.
Chữ số hexa thông thờng đợc chỉ rõ 0x ở phía trớc để dễ dàng nhận ra. Ví dụ 0x10 = 16,
0xFF = 255, và 0x7F = 12.
e6. Văn bản và kiểu font( text và fontstyle)
Nút này tạo văn bản 2D trong thế giới. Tất cả đều thực sự đơn giản trừ phi bạn
muốn thực hiện các điều phức tạp hơn sử dụng Fontstyle. Nút Text có 4 trờng. Trờng đầu
tiên là string, bạn có thể định nghĩa chuỗi hoặc danh sách các chuỗi để hiển thị. Trờng
fontStyle chứa nút FontStyle. Hai trờng cuối là maxExtent, bạn chỉ rõ độ rộng lớn nhất (
theo đơn vị mét) của văn bản và length là danh sách chiều dài đối với mỗi chuỗi, vì vậy
bạn có thể chỉ rõ độ rộng riêng biệt của mỗi chuỗi. Nếu các length đợc chỉ rõ, browser sẽ
định lại kích thớc của văn bản để cho vừa với kích thớc đó.
geometry Text {
string ["Hello", "World"]
fontStyle USE HELLOFONT
maxExtent 5
length [3, 3]
}
Nguyn Vnh Thun CNPM K46
11
ho mỏy tớnh v thc ti o Ngụn ng VRML
Nút Text là phức tạp, FontStyle phức tạp hơn. Cách tốt nhất để thực hiện ở đây là
liệt kê danh sách các trờng.
FontStyle {
size
family
style
horizontal
leftToRight
topToBottom
language
justify
spacing
}
size là chiều cao của dòng văn bản theo hệ mét. Trờng family có thể nhận 3 giá trị và thay
đổi loại bề mặt cuỉa font. Ba loại đó là "SERIF", "SANS", hoặc "TYPEWRITER", chúng
rất rõ ràng. Để thay đổi cách xem xét văn bản, bạn có thể sử dụng trờng style, có thể nhận
một trong các kiểu sau: "PLAIN", "BOLD", "ITALIC", hoặc"BOLD ITALIC". horizontal
là giá trị boolean chỉ ra liệu văn bản là ngang horizontal ("TRUE") hoặc dọc vertical
("FALSE"). leftToRight và topToBottom cũng là giá trị boolean và cân bằng trong các
hoạt động trớc. Tơng tự chuỗi utf-8 có thể xuất hiện khác nhau, phụ thuộc vào ngôn ngữ
trong nó, vì vậy điều này là mã hoá hai kí tự đối với ngôn ngữ. Thực sự không biết các mã
là gì, tốt nhất là lờ đi trờng này. justify là hiệu quả và cóthể là một trong bất kỳ "BEGIN",
"MIDDLE", hoặc "END". spacing là số lợng không gian trôngd giữa các dòng trong văn
bản. 1 là bình thờng, 2 là gấp đối khoảng cách (dòng trồng giữa mỗi dòng.
Đó là FontStyle , bạn có thể thực sự lờ đi các trờng nhng style, family và justify
thực sự là hiệu quả.
e7,Cỏc i tng c bn
ch hỡnh dỏng vt th ta dựng trng geometry. Giỏ tr ca trng ny l cỏc nỳt
hỡnh hc c bn.VRML h tr 4 i tng c bn , ú l: Cone(hỡnh nún), Cylinder(Hỡnh
tr), Box(Hỡnh hp), Sphere(Hỡnh cu). õy l bn i tng hỡnh hc c bn giỳp ta xõy
dng nờn cỏc i tng hỡnh hc ca mỡnh .Cu trỳc ca cỏc nỳt ny nh sau
Nỳt Box:
Box{size cd cc cr}. Trong ú cd, cc, cr l cỏc s thc ln lt l chiu di, chiu cao,
chiu rng ca hỡnh hp. Tõm ca hỡnh hp l gc ta h thng
Nỳt Cylinder:
Nguyn Vnh Thun CNPM K46
12
ho mỏy tớnh v thc ti o Ngụn ng VRML
Cone{
radius dk Ch bỏn kớnh ca hỡnh tr
height cc Ch chiu cao ca hỡnh hp
bottom TRUE/FALSE
top TRUE/FALSE Hai giỏ tr ny ch xem hỡnh tr cú np (TRUE) hay
khụng(FALSE) ỏy(bottom), nh(top) ca hỡnh tr
}
Nỳt Cone:
Cone{
radius Mt giỏ tr thc ch bỏn kớnh ỏy ca hỡnh nún
height Mụt giỏ tr thc ch chiu cao ca hỡnh hp
}
Nỳt Sphere:
Sphere{ radius } trng radius ch bỏn kớnh ca hỡnh cu
õy l bn nỳt hỡnh hc c bn bn xõy dng nờn cỏc i tng hỡnh hc c bn
ca mỡnh.Chỳng c gi l cỏc nỳt hỡnh hc chun. xõy dng nờn cỏc i tng hỡnh
hc khụng chun bn cú th dựng cỏc nỳt IndexedFaceSet, IndexedLineSet,
IndexedPointSet,ElavationGrid, Extrusion
Thụng thng khi bn to ra mt i tng tõm ca nú trựng vi tõm ca h to
a phng, di chuyn i tng bn dựng nỳt Transform.
Transform{
Scale Ch s bin i ca i tng
Translation ch cỏc giỏ tr dch chuyn theo cỏc trc x, y, z
Rotation ch gúc quay v trc quay
Children[] cỏc nỳt con chu tỏc ng ca translation v rotation
}
Trong nỳt Transform Scale cú tỏc ng u tiờn, sau ú n rotation v translation
gom nhiu nỳt li vi nhau ta s dng nỳt Group, cỳ phỏp ca nú nh sau:
Group{
Children[] cha cỏc nỳt con ca nỳt ny
Nguyn Vnh Thun CNPM K46
13
ho mỏy tớnh v thc ti o Ngụn ng VRML
}
Trong VRML cũn cú cỏc nỳt cm bin vi uụi l Sensor, cho phộp chỳng ta mụ
phng mt s loi cm bin trong thc t, nh TimerSensor, TouchSensor, PlaneSensor
Cỏc nỳt ni suy, nh PositionInterpolator, OrientationInterpolator, ColorInterpolator, cho
phộp bn chuyn cỏc giỏ tr khỏc kiu v kiu giỏ tr m bn mong mun nh chuyờn s
thay ụi thi gian v giỏ tr dch chuyn ca mt vt th. Cỏc nỳt ni suy úng vai trũ l
cỏc Engine trong lung Animation ca VRML. TRong VRML cũn cú mt s loi nỳt khỏc
nh LOD, Switch
2.Cỏc kiu d liu trong VRML
Nh đã nói ở phần trớc, các file VRML bao gồm một nhóm các nút. Các nút này có
thể chứa cá nút khác và có thể chứa các trờng. Mỗi trờng có các kiểu dữ liệu khác nhau.
Sau đây là mô tả của chúng.
SFBool
Đây là giá trị boolean đơn lẻ, có thể nhận giá trị "TRUE" or "FALSE".
SFColor & MFColor
SFColor là một trờng chứa màu đơn lẻ, đợc tạo nên từ ba số thực dấu chấm động
giữa 0 và 1 tơng ứng với các giá trị màu red, green và blue, ví dụ 0 1 0 là green. MFColor
là một trờng chứa các số nhân, ví dụ [0 1 0, 1 0 0, 0 0 1].
SFFloat & MFFloat
SFFloat là giá trị dấu chấm động đơn lẻ, ví dụ 7.5. MFFloat là một số các giá trị dấu
chấm động, ví dụ [1.0, 3.4, 76.54].
SFImage
SFImage là hình ảnh hai chiều hoặc là màu hoặc là xám. Nó bao gồm:
Hai số nguyên, đại diện chiều rộng hoặc chiều cao của hình ảnh
Một số nguyên biểu thị số thành phần của hình ảnh. 1 chỉ là cá mức xám, 2 là các
mức xám với độ trong suốt, 3 là màu RGB, 4 là RGB với độ trong suốt.
Sau đó, có các con số hexa are width * height bao gồm ahi chữ số cho mỗi thành
phần. Vì vậy 0xFF là màu trắng trong hình ảnh 1- thành phần và 0xFF00007F sẽ
là nửa màu đỏ trong hình ảnh 4- thành phần.
Các pixel đợc chỉ rõ từ trái sang phải, từ trên xuống dới.
SFInt32 & MFInt32
Các số nguyên đơn lẻ hoặc chuỗi 32 bit có thể theo dạng thập phân hoặc hexa. Các
số hexa bắt đầu với 32 bit, ví dụ 0xFF là 255 hệ thập phân.
SFNode & MFNode
SFNode là một nút đơn lẻ và MFNode là danh sách các nút. Trờng children với
nhiều nút là kiểu MFNode.
SFRotation & MFRotation
Nguyn Vnh Thun CNPM K46
14
ho mỏy tớnh v thc ti o Ngụn ng VRML
Các trờng này chỉ rõ một phép quay xung quanh một trục. Nó đợc tạo nên từ 4 số
thực dấu chấm động. Ba số thực đầu tiên chỉ rõ các toạ độ X, Y và Z cho các vectơ tơng
ứng với trục để quay, số thứ t là radian để quay. Hơn nữa sự lựa chọn là rotation trong
phần 1.3. SFRotation là tập các giá trị đơn lẻ, MFRotation là một danh sách.
SFString & MFString
Loại này chứa danh sách các kí tự trong tập kí tự utf-8. ASCII là tập hợp phụ của
utf-8, vì vậy bạn không cần lo lắng về tập các kí tự khác nhau hoặc về bất kỳ điều gì khác.
Chuỗi (SFString) nh "Hello", trong dấu nháy kép. Một danh sách (MFString) trông giống
nh : ["Hello", "World"].
SFTime & MFTime
Thời gian đơn lẻ hoặc một danh sách thời gian. Thời gian đợc chỉ rõ nh các số dấu
chấm động biểu thị số lợng các giây trôi qua từ nửa đêm ngày 1 tháng giêng 1970. Điều
này tạo nên nhiều cảnh quan hơn khi chú ý đến các sự kiện sau đó.
SFVec2f & MFVec2f
Các vectơ đơn lẻ hoặc danh sách các vectơ 2D. Một vectơ 2D là một cặp các số thực
dấu chấm động.
SFVec3f & MFVec3f
Các vectơ đơn lẻ hoặc danh sách các vectơ 3D. Một vectơ 3D là một bộ 3 các số
thực dấu chấm động.
3.H to trongVRML
Tất cả các khoảng cách trong VRML đợc đo bằng mét. . Hệ thống toạ độ VRML đ-
ợc chỉ ra trong sơ đồ sau:
Nguyn Vnh Thun CNPM K46
15
ho mỏy tớnh v thc ti o Ngụn ng VRML
Các phép quay trong VRML làm việc theo luật tay phải. Nếu bạn tởng tợng việc đặt
bàn tay bao trùm lên một trong số các trục, với ngón tay cái chỉ theo chiều dơng, hớng
quay dơng cùng chiều với hớng của bàn tay, nghĩa là ngợc chiều với kim đồng hồ là hớng
dơng. Điều này là đúng đối với các phép quay đối với bất kỳ trục nào, vì vậy nếu bạn
muốn quay một đối tợng một góc 90 xung quanh trục X, bạn sẽ phải sử dụng góc quay
âm 90. Điều này cũng áp dụng cho các phép quay xung quanh một trục tuỳ ý, đợc giải
thích trong phần sau của tài liệu này. Một điểm cần chú ý là các phép quay đợc đo bằng
radian chứ không đo bằng độ. Vì vậy để thực hiện phép quay nh đã mô tả ở trên, bạn phi
thực hiện phép quay -1.57 xung quanh trục X. Ta phi nh l 3.14 radian tng ng vi
180
4,Cỏc phộp bin i trong VRML
Để tạo nên thế giới sử dụng tất cả mọi thứ, chúng ta cần có thể biến đổi đợc mọi đối
tợng. VRML có ba loại biến đổi có thể áp dụng cho các đối tợng. Đó là translations,
rotations, và scales, và chúng đợc sử dụng trong nút Transform. Nhng không phải một
nút Transform phải có đầy đủ ba loại biến đổi trên, ví dụ trong nút Transform chỉ có
phép quay rotation. Các phép biến đổi trong Transform có thể áp dụng cho các nút con
children của nút. Điều này gọi là một tổ hợp, một nút cha có thể có nhiều nút con. Cú
pháp cho vấn đề này đợc chỉ ra dới đây, áp dụng cho nút Transform .
Transform {
translation 1 1 1
rotation 0 1 0 0.78
scale 2 1 2
children [
USE FBOX
]
}
Nguyn Vnh Thun CNPM K46
16
X
Y
Z
ho mỏy tớnh v thc ti o Ngụn ng VRML
Một nút Transform có thể có các tổ hợp khác bên trong nút con của nó, cho phép
bạn thực hiện tuần tự một chuỗi các phép biến đổi. Chú ý rằng trật tự các phép biến đổi là
không quan trọng. Một phép quay đợc tiếp theo một phép biến đổi không giống với một
phép biến đổi thực hiện sau phép quay. Bên trong một nút Transform đơn lẻ, các phép
biến đổi đợc thực hiện theo một trật tự chặt chẽ: Scale, Rotate và Translate. Vì vậy nếu
bạn muốn thực hiện phép biến đổi sau phép quay, bạn cần tổ hợp các nút Transform bên
trong các nút khác.
Tiếp theo chúng ta cần mô tả mỗi loại phép biến đổi làm việc nh thế nào.
a. Translation and Scale ( Phép biến đổi và tính tỉ lệ)
Có hai phép biến đổi tợng tự nhau, cả hai đều nhận ba đối số : giá trị x, y và z. Phép
biến đổi dịch chuyển trung tâm của đối tợng trong các khoảng cách này theo hớng thích
hợp. Tỉ lệ nhân với kích thớc của đối tợng bởi các giá trị này theo các hớng thích hợp.
Một phép biến đổi 0 theo một hớng sẽ loại bỏ các đối tợng không ảnh hởng đến hớng.
Yếu tố tỉ lệ 0 làm cho đối tợng không chính xác theo hớng đó, là điều bình thờng không
đợc mong muốn. Yếu tố 1 đợc yêu cầu mà không có ảnh hởng nào cả.
Quan trọng chú ý rằng việc tính tỉ lệ là tơng đối cho nguyờn bn, không phải là trung tâm
của đối tợng. Vì vậy để tính tỉ lệ của trung tâm của đối tợng, chúng ta phải đảm bảo rằng
đối tợng đợc đặt trung tâm tại phần mở đầu. Đó là lí do tại sao việc tính tỉ lệ phải thực
hiện trớc phép quay và phép biến đổi.
b. Rotation ( phép quay)
Phép quay có điểm hơi khác so với hai loại ở trên. Nó nhận 4 tham số, đầu tiên là ba
toạ độ xác định trục của phép quay và cuối cùng là góc quay, tính bằng radian. Ví dụ để
quay 1 radian xung quanh trục Y, bạn phải viết:
Transform {
rotate 0 1 0 1
children [
USE FBOX
]
}
Chiều dài của trục quay là bất kỳ, không cần thiết là 1. Bạn có thể sử dụng giá trị Y
là 50 nếu bạn thích nhng nó không thực hiện điều gì khác với giá trị Y là 1. Trục quay
hoàn toàn là tuỳ ý, bạn có thể quay quanh bất kỳ trục nào bạn thích. Ví dụ trục 1 0.3 2.45
là hoàn toàn hợp lý. Thật là khó khăn để tạo các phép quay theo cách này, tuy nhiên
chúng có thể khó khăn để quan sát, đặc biệt nếu bạn không có bất kỳ sự luyện tập nào.
Chính vì điều đó Vapour Technology đã tạo ra một cặp công cụ Dizzy và Twister. Twister
tạo phép quay vuông góc với trục từ một loại đơn giản hơn và Dizzy kết hợp nhân các
Nguyn Vnh Thun CNPM K46
17
Không có nhận xét nào:
Đăng nhận xét