Tải bản đầy đủ (.doc) (51 trang)

Tìm hiểu ngôn ngữVRML

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (413.27 KB, 51 trang )

Website: Email : Tel (: 0918.775.368

Tìm hiểu ngôn ngữVRML

Lời nói đầu
Trong xu thế tin học hoá toàn bộ cuộc sống đang diễn ra tấp nập hiện nay,lĩnh
vực đồ hoạ đóng góp một vai trò cực kỳ to lớn.Ở đâu ta cũng có thể tìm thấy những
minh hoạ cho việc áp dụng đồ hoạ máy tính vào cuộc sống : xử lý ảnh, phim hoạt
hình, đặc biệt là thực tại ảo(Virtual Reality_VR)..Thực tại ảo,là một nghành công
nghệ cao,có ứng dụng đặc biệt rộng rãi.Từ các trò chơi 3D cực kì sống động đến
những mô phỏng phức tạp trong công nghiệp và khoa học công nghệ(mô phỏng các
vụ thử hạt nhân,mô phỏng thế giới ảo dùng để huấn luỵện phi công…),từ những
trường hợp đơn giản đến các trường hợp cực kì quan trọng.
Một phần quan trọng của VR là mô phỏng thế giới thực xung quanh chúng
ta.Để làm được điều này, chúng ta có thể dùng ngôn ngữ VRML(Virtual Reality
Modeling Language).Đây là một ngôn ngữ tương đối đơn giản nhưmg cực kỳ hiệu
quả.Với VRML,kết hợp với trình duyệt IE hay Nescape,chúng ta có thể mô phỏng
thế giới quanh ta một cách như ý.Trong thế giới đó,có các vật thể,có các tương tác và
có các cảm biến y như thế giới thực.Ứng dụng của VRML cũng rất rộng rãi : mô
phỏng nhà cửa,thiết kế các phòng học ảo,các thiết bị thí nghiệm ảo, lập trình không
gian ảo…
Trong bài tập lớn môn học này,em đã tìm hiểu về VRML và dùng ngôn ngữ
VRML để mô phỏng toà nhà C14-15 của trường đại họcBKHN.Tuy được sự hướng
dẫn tận tình của thầy Hùng nhưng do thời gian và năng lực còn có hạn nên kết quả
còn nhiều thiếu sót.Tuy nhiên,em rất cám ơn thầy Hùng vì môn học và bài tập lớn
này đã đem lại cho em nhiều hiếu biết về thế giới đồ hoạ,mở ra cho chúng em một
hướng đi mới trong lĩnh vực tin học.
Nguyễn Vĩnh Thuận –CNPM K46
4
Website: Email : Tel (: 0918.775.368


BO CO BI TP LN MễN HC
" HO MY TNH V HIN THC O"
I.Gii thiu v VRML
1.V ngụn ng VRML
a,Về trình duyệt
Điều đầu tiên bạn cần là VRML browser, để quan sát các thế giới của bạn. Phần lớn các
brower VRML hoạt động cho Nescape và Internet Explorer, các browser có sẵn đối với
các hệ điều hành. Để biết thêm thông tin bạn hãy tra trong VRML Repository.
b,Son tho VRML
Điều tiếp theo bạn cần là tạo nên các thế giới của bạn. Có hai cách để thực hiện điều
này. Đầu tiên bạn có thể sử dụng một trong các công cụ tạo ra VRML, chính là các mô
hình 3D mà bạn có thể tạo ra thế giới của bạn. Một phơng pháp thực hiện VRML là mã
hoá bằng tay, tất cả bạn cần là việc soạn thảo văn bản wordpad hoặc notepad. VrmlPad là
bộ soạn thảo Vrml đặc biệt hiệu quả với đặc điểm nổi bật cú pháp. Loại đơn giản đợc mã
hoá chỉ ra, đợc cất dới file có dạng filename.wrl. Sau đó bạn có thể tải vào browser và lấy
ra để xem. Nếu bạn sử dụng bộ soạn thảo phức tạp hơn, nh Wordpad, hãy đảm bảo cất dới
file đơn giản hoặc nếu không nó sẽ không làm việc.
Làm việc với VRML cha có kinh nghiệm, nó có thể rất khó để tạo ra các đối tợng
phức tạp. Để thực hiện điều này bạn cần phải sử dụng hoặc công cụ bản quyền mức cao
hoặc ngôn ngữ mô hình hoá. Nếu bạn đi đến các lựa chọn muộn hơn, bạn có thể sẽ cần
vài loại file chơng trình biên dịch để chuyển giữa các dạng mô hình hoá và VRML. Bộ
biên dịch miễn phí là crossroads. Các công cụ VRML cấp cao có sẵn đối với nhiều công
ty.
c. Kỹ thuật nén, MIME và xuất bản
Sự mở rộng thông thờng cho các file VRML là .wrl và .wrz sử dụng cho việc nén
VRML. Browser có thể đọc các file VRML bị nén bởi GZIP. Các file nén có thể sử dụng
nh .wrz, .wrl.gz hoặc sự mở rộng chuẩn .wrl. GZIP là một chuẩn cân bằng trên các hệ
thống UNIX nhng bạn có thể nhận thấy trên phiên bản PC hoặc Mac. Cách tốt nhất để nén
các file là sử dụng Chisel, là bộ xác nhận và bộ đánh giá VRML có thể bị cất các file
VRML GZIP. Đây là một công cụ tốt để có bất kỳ cách nào cho việc gỡ rối mã bởi vì

không có ai viết VRML hoàn hảo ngay từ lần đầu tiên.
Nguyn Vnh Thun CNPM K46
5
Website: Email : Tel (: 0918.775.368

Tất cả các tài liệu internet theo chuẩn MIME, chuẩn VRML MIME là model/vrml, tơng
tự nó có thể là x-world/x-wrml. Mỗi khi bạn tạo thế giới của bạn, bạn cần tạo nó lên trang
web để mọi ngời có thể xem nó. Đối với việc này bạn cần một vài ISP (Internet Service
Provider). Bạn có thể sử dụng không gian này để đa các file lên trang web, có thể là các
file HTML thông thờng.
d. Headers và chú thích.
VRML(Virtual Reality Modeling Language), l ngụn ng cho phộp mụ t cỏc i
tng 3D ca th gii thc, v chy trờn mụi trng web. Nú cho phộp xõy dng nờn cỏc
file . wrl cú th m c bng cỏc trỡnh duyt web nh IE hay NESCAPE. Mt file vrml
cú dng nh sau:
Tiờu file: #VRML V2.0 utf8
trong ú utf8 l cm t cho phộp dựng cỏc ký t quc t trong file VRML sau ú l cỏc
nỳt. Điều này nói cho các browser xem xét file VRML, và phiên bản này nó đang sử
dụng. Trong trờng hợp này nó là phiên bản 2.0. VRML là trờng hợp dễ bị ảnh hởng(case
sensetive), việc sử dụng chính xác nh bạn đã thấy. Phần utf8 thông báo cho browser
chuẩn chuỗi văn bản để sử dụng. VRML 1.0 hoặc là ascii hoặc utf8 nhng phiên bản 2.0
chỉ là utf8, tốt nhất để sử dụng.
Bất kỳ dòng nào bắt đầu với kí tự # là chú thích, và bị lờ đi khỏi bộ phân tích cú
pháp VRML. Tiếp theo là VRML hợp lệ.
e,Các nút trong VRML
Nỳt u tiờn thng l nỳt WORLDINFO cha thụng tin c t v file vrml sau ú l
cỏc loi nỳt khỏc xõy dng nờn file vrml.
Nút này chứa thông tin chung về thế giới ( the world) nh tiêu đề của thế giới, đợc
hiển thị trong thanh tiêu đề của cử sổ browser tơng tự nh cờ TITLE trong HTML.
WorldInfo cũng có thể chứa một chuỗi thông tin, chứa các thông tin khác về file. Bạn có

thể đặt vào các từ khoá cho các search engine. Một nút WorldInfo mẫu đợc chỉ ra ở dới
đây:
WorldInfo {
title "Floppy's VRML97 Tutorial Example 1"
info ["(C) Copyright 1999 Vapour Technology"
""]
}
Nguyn Vnh Thun CNPM K46
6
Website: Email : Tel (: 0918.775.368

Có thể có các chuỗi phức tạp trong trờng info, bằng cách đặt chúng bên trong ngoặc
vuông. Tiêu đề không cần ngoặc vuông, khi nó chỉ là một chuỗi đơn lẻ. File VRML có
thể có nhiều nút WorldInfo nhng chỉ có nút đầu tiên đợc phân tích, các phần sau bị lờ đi.
VRML cú 54 loi nỳt khỏc nhau, v c chia lm 9 nhúm, bao gm:
. Grouping Nodes : Cỏc nỳt nhúm
. Special Group Nodes: Cỏc nỳt nhúm c bit
. Common Nodes: Cỏc nỳt chung
. Sensor Nodes: Cỏc nỳt cm bin
. Geometry : Cỏc nỳt hỡnh hc
. Geometric Properties Nodes: Cỏc nỳt thuc tớnh hỡnh hc
. Appearance Nodes : Cỏc nỳt hỡnh dỏng
. Interpolators Nodes Cỏc nỳt ni suy
. Bindable Nodes: Cỏc cú th ghộp ni c
Mt nỳt gm cú :
Tờn nỳt: Thng bt u bng ch in hoa v ch cú th l mt trong cỏc tờn chun do
vrml cung cp, sau ú l n cỏc trng ca nỳt chỳng thng bt u l ch thng, mi
loi nỳt cú cỏc trng khỏc nhau. Gớa tr ca trng cú th l cỏc giỏ tr thc hoc cỏc b
giỏ tr thc hoc cú th l mt nỳt c bn, ta cú th hỡnh dung cỏc nỳt nh cỏc lp trong
lp trỡnh hng i tng. VRML khụng cho bn nh ngha thờm cỏc nỳt mi ca mỡnh

m ch c dựng cỏc nỳt c bn ca nú. Mt hỡnh dng hỡnh hc bt k cú th c xõy
dng qua nỳt Shape. Cu trỳc ca nỳt ny cú dng nh sau:
Shape{
appearance Appearance{
material Material{
diffuColor 1 0 0
Shininess 0
}
textture ImageTextTure{}
}
geometry Box{}
}
trong ú appearance l thuc tớnh ca nỳt giỏ tr ca nú ch cú th l nỳt Appearance dựng
ch dng b mt ca vt th . Trong nỳt Appearance co cỏc trng material dựng ch
Nguyn Vnh Thun CNPM K46
7
Website: Email : Tel (: 0918.775.368

mu, búng, trong sut ca vt th. Trng textture dựng ch kt cu ca vt th,
giỏ tr ca trng ny cú th l cỏc nỳt ImageTextture,MovieTextture...
Chỳng ta im qua mt s nỳt c bn
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
Nguyn Vnh Thun CNPM K46
8
Website: Email : Tel (: 0918.775.368

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
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ì
Nguyn Vnh Thun CNPM K46
9
Website: Email : Tel (: 0918.775.368

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"
}
}
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 {
Nguyn Vnh Thun CNPM K46
10
Website: Email : Tel (: 0918.775.368

texture PixelTexture {
image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFF0000
}
}
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
Nguyn Vnh Thun CNPM K46
11
Website: Email : Tel (: 0918.775.368

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]

}
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
Nguyn Vnh Thun CNPM K46
12

Website: Email : Tel (: 0918.775.368

Để chỉ hình dáng vật thể ta dùng trường geometry. Giá trị của trường này là các nút
hình học cơ bản.VRML hỗ trợ 4 đối tượng cơ bản , đó là: Cone(hình nón), Cylinder(Hình
trụ), Box(Hình hộp), Sphere(Hình cầu). Đây là bốn đối tượng hình học cơ bản giúp ta xây
dựng nên các đối tượng hình học của mình .Cấu trúc của các nút này như sau
Nút Box:
Box{size cd cc cr}. Trong đó cd, cc, cr là các số thực lần lượt là chiều dài, chiều cao,
chiều rộng của hình hộp. Tâm của hình hộp là gốc tọa độ hệ thống
Nút Cylinder:
Cone{
radius dk Chỉ bán kính của hình trụ
height cc Chỉ chiều cao của hình hộp
bottom TRUE/FALSE
top TRUE/FALSE Hai giá trị này để chỉ xem hình trụ có nắp (TRUE) hay
không(FALSE) ở đáy(bottom), đỉnh(top) của hình trụ
}
Nút Cone:
Cone{
radius Một giá trị thực chỉ bán kính đáy của hình nón
height Môt giá trị thực chỉ chiều cao của hình hộp
}
Nút Sphere:
Sphere{ radius } trường radius chỉ bán kính của hình cầu
Đây là bốn nút hình học cơ bản để bạn xây dựng nên các đối tượng hình học cơ bản
của mình.Chúng được gọi là các nút hình học chuẩn. Để xây dựng nên các đối tượng hình
học không chuẩn bạn có thể dùng các nút IndexedFaceSet, IndexedLineSet,
IndexedPointSet,ElavationGrid, Extrusion
Nguyễn Vĩnh Thuận –CNPM K46
13

Website: Email : Tel (: 0918.775.368

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
}
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
Nguyn Vnh Thun CNPM K46
14
Website: Email : Tel (: 0918.775.368

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
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.
Nguyn Vnh Thun CNPM K46
15
Website: Email : Tel (: 0918.775.368

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:
Nguyễn Vĩnh Thuận –CNPM K46
16
Website: Email : Tel (: 0918.775.368

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
17
X
Y
Z
Website: Email : Tel (: 0918.775.368

}
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
Nguyn Vnh Thun CNPM K46
18
Website: Email : Tel (: 0918.775.368

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
phép quay vuông góc với trục để tạo một loại đơn giản hơn với hiệu quả tơng tự. Bạn có
thể sử dụng các điều này để dễ dàng hơn trong việc quay các đối tợng trong thế giới.
5.Các sự kiện
Một số các trờng, hầu nh các nút đều chứa các sự kiện. Có hai loại sự kiện , eventIn
và eventOut. Các eventOut là các sự kiện sắp đi ra, phát sinh các thông tin nh thay đổi
nh thay đổi một giá trị hoặc thời gian của kích chuột. Các eventIn là các sự kiện sắp đến,
chấp nhận thông tin từ bên ngoài của nút và thực hiện một vài điều với nó. Mỗi sự kiện có
một loại dữ liệu thích hợp với chúng, nh mô tả ở trên.
Một vài nút có các trờng đợc trng bày. Điều này có nghĩa là nút có hai trờng định nghĩa
cho trờng đó set_fieldname and fieldname_changed. Có eventIn và eventOut đối với
trờng có thể sử dụng để thiết lập các giá trị của nó và thông báo cho thế giới bên ngoài khi
có sự thay đổi. Nếu bạn sử dụng set_fieldname để thiết lập giá trị của trờng, nút sẽ phát
sinh một sự kiện fieldname_changed. Để dễ dàng sử dụng, các thành phần set_ và
_changed của sự kiện có thể nghiêng về phía trái và browser sẽ làm việc khi sự kiện đợc
sử dụng. Nếu một trờng không đợc phơi bày ra, nó không thể thay đổi do các sự kiện và
giá trị trong trờng đợc sử dụng trong suốt các khoảng thời gian. Để xem xét trờng nào đợc
bày ra đối với mỗi nút, hãy giữ lấy một tham chiếu từ một vị trí từ trang liên kết hoặc
nhận lấy tham chiếu nút trong phụ lục.
6.Các router
Để thực hiện hiệu quả mọi thứ với các sự kiện, chúng ta cần nối chúng với nhau.
Việc kết nối đợc biết đến nh ROUTER. Ví dụ để dẫn từ touchTime eventOut tới
startTime eventIn, chúng ta sẽ dẫn sự kiện nh sau:

ROUTE SENSOR.touchTime TO SOUND.startTime
Vì vậy, bít này của mã sẽ dẫn tới sự kiện touchTime từ TouchSensor ( sẽ đề cập
đến ở phần sau) tới sự kiện startTime trong nút sound ( cũng đợc đề cập ở phần sau). Do
đó, khi TouchSensor bị kích vào, âm thanh đợc chơi. Bạn cần sử dụng DEF cho mỗi nút
Nguyn Vnh Thun CNPM K46
19
Website: Email : Tel (: 0918.775.368

mà bạn dẫn tới hoặc từ đó sao cho nó có một tên riêng lẻ. Vì vậy, các nút TouchSensor và
Sound sẽ đợc định nghĩa:
DEF SENSOR TouchSensor {
}
DEF SOUND Sound {
}
Ngoại trừ các trờng bên trong chúng. Nếu bạn có một số các đối tợng với cùng một
tên (do sử dụng USE), và dẫn tới hoặc từ chúng, tất cả các đối tợng bị ảnh hởng, vì vậy
nếu bạn chỉ muốn một đối tợng bị ảnh hởng, đa cho nó một tên duy nhất hoặc sử dụng
PROTO, đợc giải thích sau.
7,Camera, âm thanh, ánh sáng
Trong phần này chúng tôi sẽ trình bày cách để giúp các bạn làm cho phong cảnh
của bạn trở nên hiện thực hơn. Nó bao gồm máy quay phim, ánh sáng, âm thanh, nền và
trạng thái của tất cả những yếu tố khác. Trớc hết ta hủy bỏ đi điểm khởi đầu ngầm định và
xem xét máy quay phim (camera).
a,Camera
VRMR browser tạo ra một cổng vào mặc định cho một cảnh, nó đợc đặt dọc theo
trục +Z sao cho toàn bộ thế giới đợc hiển thị trong cửa sổ. Tuy nhiên bạn không nên bắt
đầu từ vị trí này mà bạn nên để ngời quan sát có thể chọn một trong số các điểm nhìn. Để
làm đợc điều này bạn hãy đặt thêm các camera trong phong cảnh của bạn và sử dụng các
nút điểm nhìn (Viewpoint node).
Nút điểm nhìn có một số trờng, trờng thứ nhất là vị trí (position), đó là một SFVec3f

(nh một bộ ba các số thực mô tả các tọa độ X, Y, Z). Trờng này xác định vị trí của camera
trong thế giới. Trờng thứ hai là hớng (orientation), đó là một SFRolation, nó cũng gồm 3
số thực để xác định sự quay của camera. Hớng ngầm định là nhìn về hớng -Z với độ lệch
+X ở bên phải và +Y ở phía trên.
Trờng thứ 3 là phạm vi nhìn (FieldofView). Trờng này là một số thực tính theo đơn
vị radian có giá trị từ 0 đến pi. Nó dùng để xác định góc nhìn, giá trị nhỏ hơn tơng ứng với
góc nhìn nhỏ hơn, nó cho ta kết quả thu nhỏ. Giá trị lớn tơng ứng với hình ảnh đợc phóng
to. Giá trị ngầm định là 0,78 radian ứng với hình ảnh trung bình.
Mỗi điểm nhìn còn có một trờng mô tả (description). Đây là trờng mà brouser dùng
để xác định camera, trờng này là một SFString. Cú pháp đầy đủ của một điểm nhìn là nh
sau:
Viewpoint {
position 0 5 5
orientation 1 0 0 0.39
Nguyn Vnh Thun CNPM K46
20
Website: Email : Tel (: 0918.775.368

fieldOfView 0.39
description "Camera 1"
}
Bạn cũng có thể sử dụng những camera khác để tạo ra những cổng vào khác cho
phong cảnh của bạn bằng cách liên kết tên của camera với trang mà nó đợc dùng làm
cổng vào cho phong cảnh. Ví dụ nh để đ vào một phong cảnh tại camera có tên CAM1
bạn phải thực hiện kết nối nh sau:
World.wrl#CAM1
Những vấn đề liên quan:
Brouser sẽ bắt đầu kiểm tra hình ảnh trong thế giới của bạn tại camera đầu tiên mà
nó tìm thấy trong file, vì vậy hãy chắc chắn rằng là cổng đầu tiên mà bạn đã ghi nhận.
Một vấn đề nhỏ nữa là việc lập kế hoạch cho các điểm nhìn là khá phức tạp. Nếu bạn biết

camera ở đâu và nơi nào bạn muốn xem thì sẽ rất khó để điều chỉnh đúng hớng. Tuy
nhiên có một công cụ nhỏ từ Vapour Technology sẽ giúp bạn thực hiện toàn bộ điều này,
hãy gọi Peek
b,Âm thanh
Để làm cho thế giới của bạn trở nên hấp dẫn hơn, chúng ta sẽ thêm âm thanh vào
đó. Ta có thể tạo âm thanh nền, tiếng chuông cửa, còi báo động hoặc những âm thanh
khác mà bạn muốn. Tất cả những điều đó đợc thực hiện bởi 2 loại nút là nút Sound (Sound
nodes) và nút AudioClip (AudioClip nodes). Bạn hãy tởng tợng: một nút Sound giống nh
sự xác định ở nơi nào trong không gian bạn sẽ nghe thấy âm thanh và nó bắt nguồn từ
đâu. Còn bản thân âm thanh sẽ đợc xác định bởi nút AudioClip.Trớc tiên chúng ta hãy
xem xét nút Sound.
Nút Sound:
Một nút Sound đợc sử dụng để xác định vị trí và sự định hớng của một nguồn âm
thanh trong thế giới của bạn. Nút sound đợc đặt tại một nơi nào đó. Cho dù bạn nghe âm
thanh hay bất cứ liên quan nào khác với âm thanh thì âm thanh vẫn đợc phát ra dới dạng
những mặt elipsoid .
Trong vùng màu đỏ, âm thanh sẽ đợc nghe thấy với toàn bộ cờng độ của nó. Trong
vùng màu vàng, âm thanh loãng đi theo khoảng cách đến nguồn âm. Các khoảng cách
minFront, maxFront, minBack, maxBack là các trờng đợc xác định bởi nút sound, đó là
các hớng. Cú pháp của nút Sound nh sau:
Sound {
SFVec3f direction 0 0 1
SFFloat intensity 1
SFVec3f location 0 0 0
SFFloat maxBack 10
Nguyn Vnh Thun CNPM K46
21
Website: Email : Tel (: 0918.775.368

SFFloat maxFront 10

SFFloat minBack 1
SFFloat minFront 1
SFFloat priority 0
SFNode source NULL
SFBool spatialize TRUE
}
Các trờng khác có tác dụng nh sau: Direction là một vectơ xác định hớng mà âm
thanh truyền tới. Intensity là cờng độ của âm thanh. Giá trị 1 là toàn bộ cờng độ của âm
thanh trong file, còn giá trị 0 là hoàn toàn yên lặng. Location là vị trí của nguồn âm thanh
trong thế giới. 4 thông số max/ min/ Front/Back xác định hình dạng của elipsoid nh đã nói
ở trên. Ví dụ: Để có một âm thanh có thể nghe rõ nh nhau ở tất cả các hớng bạn hãy lấy
maxFront = maxBack, minFront = minBack. Nếu bạn không muốn âm thanh bị giảm theo
khoảng cách. Bạn hãy đặt tất cả các giá trị với cùng một khoảng cách mà khoảng cách đó
đủ lớn để có thể bao trùm toàn bộ thế giới của bạn. Nếu bạn muốn cho âm thanh của bạn
nhỏ dần đi theo khoảng cách, hãy đặt các giá trị max là 10 nhân với giá trị min.
Priority là mức độ u tiên của âm thanh. Brouser có một số các kênh âm thanh và
Priority của các âm thanh đợc sử dụng để xác định xem âm thanh nào sẽ đợc phát ra, nó
sẽ lấy giá trị 0 hoặc 1. âm thanh nền có mức độ u tiên thấp với giá trị là 0, mức độ u tiên
cao nên dùng với những âm thanh ngắn nh tiếng chuông, tiếng còi ... nó có giá trị 1.
Trờng Spatialize đợc brouser dùng để xác định việc truyền âm thanh, điều đó có
nghĩa rằng nó sẽ phát âm thanh thông qua các speaker đợc xem là các nguồn âm thanh, vì
vậy bạn sẽ nghe thấy âm thanh thay đổi khi bạn thay đổi cách liên hệ với nó. Nếu nh tr-
ờng này là FALSE thì brouser sẽ không thực hiện điều này. Trờng này có ích trong việc
tối u hóa cũng nh trong việc tạo ra các âm thanh bao xung quanh.
Có một yếu tố còn cha có trong nút sound, đó chính là nút nguồn âm, đây là một
nút rất quan trọng. Nó có thể là nút AudioClip hoặc nút MovieTexture. Nếu bạn sử dụng
MovieTexture, brouser sẽ phát âm thanh từ một file hình (movie file). Cách này hữu ích
trong việc phát âm thanh từ các file movie. Cách còn lại tỏ ra hiệu quả hơn là sử dụng nút
AudioClip, cách này sẽ đợc trình bày dới đây.
Audioclip:

Nút audioclip xác định cái gì sẽ đợc phát ra tại nút sound và phát ra khi nào. Cú
pháp của nó nh sau:
AudioClip {
SFString description ""
SFBool loop FALSE
SFFloat pitch 1.0
SFTime startTime 0
Nguyn Vnh Thun CNPM K46
22
Website: Email : Tel (: 0918.775.368

SFTime stopTime 0
MFString url []
}
Các chức năng của AudioClip nh sau: Trờng url là một danh sách các file không
nén có dạng .WAV hoặc General MIDI. MID. Điều này rất hữu ích cho việc kết hợp với
âm nhạc. Brouser sẽ trình bày file đầu tiên trong danh sách mà nó có thể load. Loop dùng
xác định xem âm thanh có đợc lặp lại không, và description là sự mô tả về âm thanh mà
brouser muốn trình bày. Pitch là hệ số tốc độ phát lại và cờng độ của âm thanh. Giá trị
pitch 1.0 là tốc độ thông thờng, giá trị pitch là 0.5 thì việc phát lại sẽ ở tốc độ bằng một
nửa. Giá trị là 2.0 sẽ cho kết quả ngợc lại, tăng gấp đôi tốc độ phát âm thanh.
StartTime và StopTime là các giá trị SFTime, chúng dùng để xác định khi nào phát
và ngừng phát âm thanh. Nếu bạn ghi nhớ một số giây kể từ ngày 1- 1- 1970 và liên kết
nó với các cảm biến và các đờng dẫn. Một cảm biến sẽ phát ra một tín hiệu báo khi đến
thời gian đợc kích hoạt, và nếu nó đợc nối với một nút AudioClip thông qua việc đặt
StartTime thì âm thanh sẽ đợc phát ra. Chúng ta sẽ xem xét thêm về điều này khi tơng tác
trực tiếp với các sensor.
Fade away
Một vấn đề nữa cần xem xét ở các nút sound là việc giải nén. Các file dạng .WAV
là quá lớn và tốn nhiều thời gian để download, vì vậy ta phải hạn chế sử dụng chúng để

tăng hiệu quả. Các file MIDI tốt hơn và tỏ ra có hiệu quả trong nhạc nền. Tuy nhiên cần
phải làm cho nó đạt độ trong (giống file .WAV) một cách tối đa có thể đợc. Nếu bạn có
các file này, chỉ cần ngắn và chất lợng đủ chấp nhận đợc, chứ không ai có thể đợi 10 phút
để download những file có chất lợng .WAV.
Đó là tất cả những vấn đề cơ bản mà bạn cần biết về âm thanh. Để tạo ra những
âm thanh nh tiếng chuông cửa, chúng ta cần có khả năng tơng tác với thế giới thông qua
các sensor và những dụng cụ tơng tự nh vậy. Chúng ta cha xem xét đến vấn đề này và tôi
xin dừng phần trình bày về âm thanh của mình ở đây.
c,ánh sáng và màu sắc
ở phần trớc, chúng ta đã xét một số đối tợng đặc biệt đó là IndexFaceSets,
Extrusions và ElevationGrid, chúng tạo ra những hình rất đẹp, tuy vậy ta có thể làm nhiều
hơn thế nữa. Những nút hình học này cho phép bạn xác định pháp tuyến, màu sắc, kiểu
loại và những tham số khác để có thể tuỳ chọn sự xuất hiện của các đối tợng này. Tôi sẽ
giải thích một chút về những điều này và trình bày cách ứng dụng chúng.
Pháp tuyến (Normal):
Một pháp tuyến là một vector ứng với một bề mặt, nó nằm vuông góc với bề mặt ở
điểm mà tại đó nó cắt bề mặt. Các pháp tuyến đợc sử dụng trong các VRML Brouser để
làm việc tính toán trở nên sáng sủa hơn
Nguyn Vnh Thun CNPM K46
23
Website: Email : Tel (: 0918.775.368

Tuy nhiên bạn vẫn phải cẩn thận vì công việc của bạn ở đây không phải là lập trình đồ
họa 3D. Nh tôi đã đề cập, Brouser sử dụng các pháp tuyến để làm cho việc tính toán trở
nên sáng sủa hơn. Dựa vào hớng của pháp tuyến, brouser sẽ đánh bóng bề mặt theo những
cách khác nhau. Nếu 2 bề mặt có các pháp tuyến tạo với nhau 1 góc nhỏ hơn một giá trị
đã định nào đó, brouser sẽ đánh bóng làm trơn và nối chúng lại với nhau, và tạo nên một
vùng tiếp xúc cong. Nếu góc lớn hơn giá trị đã định đó, brouser sẽ đánh bóng và kết nối
chúng thành một cạnh. Khi đó góc này đợc gọi là góc gấp, đó là một trờng xuất hiện ở
trong extrusions, Elevationgrid và IndexFaceSets. Sử dụng chúng có thể làm tăng khả

năng hiển thị vật thể, làmvật thể trơn hơn hoặc có cạnh gấp.
Hãy xem phần example và code để biết cách làm một góc xuất hiện trong các đối tợng.
Bây giờ ta hãy quay lại với các pháp tuyến. Brouser sẽ tạo ra các pháp tuyến ngầm
định cho tất cả các loại nút, bao gồm cả các đối tợng đặc biệt. Tuy nhiên những nút hình
học đặc biệt có một trờng là trờng pháp tuyến, trờng này chứa nút pháp tuyến (normal
node). Nó cho phép bạn xác định các pháp tuyến một cách rõ ràng nhờ đó bạn có thể đạt
đợc hiệu quả cao về bố trí ánh sáng. Các pháp tuyến này đợc xác định cho mỗi đỉnh hoặc
cho mỗi mặt, xác định điều này bằng trờng normalPerVertex. Nếu trờng này là TRUE thì
các pháp tuyến đợc xác định cho mỗi đỉnh, nếu là FALSE thì các pháp tuyến đợc xác định
cho từng mặt. Nếu bạn hoàn toàn không xác định các pháp tuyến thì brouser sẽ tạo ra
chúng một cách ngầm định, đây là giải pháp tốt nhất cho hầu hết các trờng hợp. Bạn cũng
chỉ sử dụng đến các pháp tuyến khi cần có những kết quả đặc biệt. Việc tự xác định các
pháp tuyến sẽ làm bạn tốn rất nhiều không gian, và nhiều thời gian để download. Vì vậy
nên hạn chế điều này và chỉ thực hiện khi thực sự cần thiết.
Trên đây là phần lý thuyết, bây giờ ta sẽ đi vào cụ thể. Ngoài các trờng
CreaseAngle, NormalPerVertex đã trình bày còn có một số trờng mới và nút mới. Chúng
ta sẽ bắt đầu với nút Normal đó là nút bao gồm một tập các pháp tuyến, nó chỉ đợc sử
dụng trong trờng normal
Normal {
exposedField MFVec3f vector []
}
Nút này chỉ có một trờng đó là trờng vector, nó bao gồm một tập các giá trị
MFVec3f đó là những vector pháp tuyến của từng mặt. . Nó đợc sử dụng đê làm cho
những đối tợng cong, phức tạp trở nên đơn giản hơn. Ví dụ: Bạn có thể tạo nên một hình
trụ trơn dựa vào các pháp tuyến.
Các nút hình học có chứa trờng ccw. Nó xác định các đỉnh của bề mặt đợc xét thứ
tự theo chiều kim đồng hồ hay ngợc chiều kim đồng hồ. Nó ảnh hởng đến hớng của các
pháp tuyến ngầm định mà những pháp tuyến ngầm định này đợc sử dụng trong việc tính
toán trực quan. Nếu bạn nhìn vào bề mặt với các đỉnh ngợc chiều kim đồng hồ thì pháp
tuyến sẽ chỉ về phía bạn. Nếu bạn nhìn một bề mặt với các đỉnh theo chiều kim đồng hồ

Nguyn Vnh Thun CNPM K46
24
Website: Email : Tel (: 0918.775.368

thì pháp tuyến sẽ chỉ ra ngoài và sẽ không nhìn thấy. Thiết lập sai trờng này có thể gây ra
một số kết quả thú vị ví dụ nh vật thể không có bề mặt trớc (để lộ rõ cấu trúc bên trong).
Trờng ccw đợc ngầm định là TRUE.
Trờng tiếp theo là NormalIndex. Nó bao gồm một danh sách một số mặt hoặc các
điểm, phụ thuộc vào trờng NormalPerVertex. Mặt (điểm) thứ nhất đợc xác định bởi trởng
CoorIndex (Coor) với số 0, tiếp theo nh vậy đến n-1. Trong đó n là số mặt (điểm). Trờng
NormalIndex xác định pháp tuyến nào tơng ứng với mặt (điểm) nào. Nh vậy bạn không
cần xác định các pháp tuyến theo thứ tự giống với các mặt (điểm). Nếu bạn không dùng
trờng này thì các pháp tuyến sẽ có thứ tự giống với các mặt, điểm.
Các nút extrution và IndexFaceSet cũng có trơng Convex. Nếu nó là TRUE thì
brouser sẽ không kiểm tra việc các đối tợng chồng lên nhau. Giá trị ngầm định là FALSE,
nó an toàn hơn. Bạn chỉ nên thiết lập trờng này khi biết chắc vật thể hoàn toàn lồi
Màu sắc:
Tơng tự nh các pháp tuyến, ta có thể điền màu sắc khác nhau vào các mặt hay các
điểm. Điều này đợc thực hiện bởi một trờng Color, nó chứa một nút Color . Tơng tự nh
với trờng normal (Pháp tuyến) nó cũng có trờng ColorIndex và ColorPerVertex và cũng
có tác dụng giống nh trờng normal.
Cú pháp của nút color là nh sau:
Color {
exposedField MFColor color []
}
Intact
8.Mt s vn v lp trỡnh VRML
a,Tỏi s dng cỏc i tng
Nếu bạn có nhiều đối tợng giống hệt nhau , thờng rất khó khăn để duy trì việc viết
chính xác nhiều đối tợng theo cùng một loại. Do đó, bạn có thể sử dụng lại các định nghĩa

ở phần trớc. Sử dụng hộp này, bạn có thể định nghĩa nó để có tên FBOX. Mỗi khi bạn
muốn sử dụng lại hộp, bạn có thể chỉ gõ USE FBOX thay cho toàn bộ định nghĩa. Ví dụ
đợc chỉ ra dới đây:
DEF FBOX Shape {
appearance Appearance {
material Material {
}
}
geometry Box {
}
}
Nguyn Vnh Thun CNPM K46
25
Website: Email : Tel (: 0918.775.368

USE FBOX
Đây không chỉ là một bit của ví dụ đơn giản, khi tạo hai hộp chính xác tại cùng
một vị trí. không chỉ là các thứ mà bạn muốn. Thỉnh thoảng, là định nghĩa USE tại một
vài nơi bit có ý nghĩa hơn. Đồng thời bạn có thể DEF/USE bất kỳ loại nút nào vì vậy bạn
muốn sử dụng lại Appearance của một đối tợng, bạn có thể thực hiện tốt điều đó.
Shape {
appearance DEF APP1 Appearance {
material Material {
}
}
geometry Box {
}
}
Shape {
appearance USE APP1

geometry Box {
}
}
Một lần nữa bạn không thấy có điều gì ngạc nhiên ở đây, nh hai hộp ở cùng vị trí
trong thế giới, nhng bạn nhận đợc ý tởng.
Một cách khác để sử dụng lại mã VRML là để sử dụng các nút Inline. Điều này
nhận dữ liệu từ các file bên ngoài và chèn nó vào file của bạn. Vì vậy nếu bạn có mô hình
chiếc ghế gọi là chair.wrl bạn có thể chèn vào quang cảnh của bạn:
Inline {
url "chair.wrl"
}
File bạn đang kết hợp theo cách này phải là VRML hợp lệ, vì vậy nó phải là các
header và mọi thứ mà thế giới VRML phải có. Nếu bạn không tải cân bằng vào một
browser, bạn không cần gạch chân.
b,Proto
Chỉ có một thứ đợc bao trùm lên, đó là mẫu. Điều này là thực sự liên quan tới các sự
kiện và các route nhng chúng tôi phải giải thích các trờng, thật dễ dàng để giải thích. Việc
lấy mẫu đầu tiên là một cách để sử dụng lại mã của bạn. Nếu bạn muốn một số các đối t-
ợng của cùng một loại, bạn có thể sử dụng DEF và USE. tuy nhiên, nếu bạn muốn sử
dụng một số đối tợng giống nhau, nhng với một chút khác nhau, có thể nói các chiều cao
Nguyn Vnh Thun CNPM K46
26
Website: Email : Tel (: 0918.775.368

khác nhau. Trong trờng hợp đó, bạn có thể sử dụng PROTO để thay thế. Để định nghĩa
mẫu đầu tiên, bạn định nghĩa đối tợng của bạn và định nghĩa các trờng và sự kiện với nó.
dới đây là một ví dụ về PROTO đối với một hộp với biến màu sắc:
PROTO VBox [
field SFColor boxColour 1 0 0
]

{
Shape {
appearance Appearance {
material Material {
diffuseColor IS boxColour
}
}
geometry Box {
}
}
}
Trờng trong các ngoặc vuông tại phần đầu của khai báo là giao diện của một đối t-
ợng và các con số là các giá trị mặc định cho trờng. Khi một trờng hợp của VBox đợc
khai báo, giá trị đợc sắp xếp vào trờng boxColour thay thế vào trờng diffuseColor của nút
Material. Do đó, để khai báo red VBox và green VBox, chúng ta có thể sử dụng nút
VBox mới tại bất kỳ đâu chúng ta có thể sử dụng nút Shape, nút cấp đỉnh trong phần khai
báo là nút Shape .
VBox { }
VBox {
boxColour 0 1 0
}
Đầu tiên sử dụng các định nghĩa red VBox mặc định, thứ hai đa ra một green VBox.
Bạn có thể định nghĩa eventIns, eventOuts và exposedFields cho các mẫu chuẩn theo cùng
một cách, sử dụng IS để ánh xạ trờng PROTO thành một trờng trong sự thực hiện. Trờng
PROTO phải đợc ánh xạ theo cùng một kiểu trờng/ sự kiện và cũng là cùng loại dữ liệu.
Chỉ một ngoại lệ là bạn có thể ánh xạ một trờng thông thờng trong định nghĩa PROTO
thành exposedField trong sự thực hiện khi trờng thông thờng là tập hợp phụ các
exposedField, vì vậy ánh xạ hai trờng sẽ không có hại gì cả. Bạn không thể áp dụng theo
cách khác.
Nguyn Vnh Thun CNPM K46

27
Website: Email : Tel (: 0918.775.368

c,ExternProto
Nếu bạn muốn định nghĩa PROTO ở một nơi nào khác hơn là trong file chính, bạn
có thể sử dụng EXTERNPROTO. Điều này nói cho các browser số lợng các định nghĩa
đối tợng trong một file khác. Trong file chính của bạn, bạn bao gồm định nghĩa
EXTERNPROTO và phải có PROTO đầy đủ trong file khác. Cú pháp EXTERNPROTO
đợc chỉ ra dới đây:
EXTERNPROTO VBox [
field SFColor boxColour
]
"proto.wrl
File "proto.wrl" trong trờng hợp này phải chứa header VRML và các định nghĩa
mẫu chuẩn đầu tiên, không phải là một thứ gì khác. Nếu bạn có nhiều hơn một PROTO
trong file của bạn, bạn phải khai báo giống nh một thứ bạn đang sử dụng:
"proto.wrl#VBox"
Chú ý rằng bạn không cần phải bao gồm các giá trị mặc định trong các định nghĩa
EXTERNPROTO, chỉ là các kiểu trờng. Thay thế vào một file đơn lẻ, nếu bạn muốn bao
gồm các lựa chọn phức tạp đối với file để tải, bạn có thể đặt chúng vào ngoặc vuông:

EXTERNPROTO VBox [
field SFColor boxColour
]
[
"proto.wrl"
" />]
d,Lắp ráp
VRML không còn là ngôn ngữ tĩnh nữa. Nó là những thứ sống động, có thể nhận
đầu vào và đa ra các đầu ra khác nhau. Điều này yêu cầu một vài loại mô hình thực hiện

bên trong, để thông báo những thứ đã thay đổi và trật tự thực hiện nó. Điều này đợc thực
hiện do lắp ráp các thứ với nhau trong thế giới, cung cấp các đờng dẫn kèm theo các
thông điệp đi cùng với chúng. Những sự lắp ráp này là không nhìn thấy đợc, chúng không
có sự hiển thị nào trong thế giới nhng chúng gắn các mô hình cơ sở với nhau, cho phép
các hiệu quả to lớn.
Phần lớn các nút có eventIn và eventOut và rất nhiều exposedField, đó là cách các
nút nói chuyện với nhau. eventIn giống nh các bộ nhận nghe các thông điệp gọi các
events từ bên ngoài và đa chúng đến đợc xử lý. eventOut là các bộ truyền phát, gửi các
Nguyn Vnh Thun CNPM K46
28

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×