Tải bản đầy đủ (.doc) (47 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 (377.63 KB, 47 trang )

Đồ hoạ máy tính và thực tại ảo Ngôn ngữ VRML

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
ho mỏy tớnh v thc ti o Ngụn ng VRML


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.
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
Nguyn Vnh Thun CNPM K46
5
ho mỏy tớnh v thc ti o Ngụn ng VRML

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"
""]
}
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
Nguyn Vnh Thun CNPM K46
6
Đồ hoạ máy tính và thực tại ảo Ngôn ngữ VRML

. Special Group Nodes: Các nút nhóm đặc biệt
. Common Nodes: Các nút chung
. Sensor Nodes: Các nút cảm biến
. Geometry : Các nút hình học
. Geometric Properties Nodes: Các nút thuộc tính hình học
. Appearance Nodes : Các nút hình dáng
. Interpolators Nodes Các nút nội suy
. Bindable Nodes: Các có thể ghép nối được
Một nút gồm có :
Tên nút: Thường bắt đầu bằng chữ in hoa và chỉ có thể là một trong các tên chuẩn do
vrml cung cấp, sau đó là đến các trường của nút chúng thường bắt đầu là chữ thường, mổi
loại nút có các trường khác nhau. Gía trị của trường có thể là các giá trị thực hoặc các bộ
giá trị thực hoặc có thể là một nút cơ bản, ta có thể hình dung các nút như các lớp trong
lập trình hướng đối tượng. VRML không cho bạn định nghĩa thêm các nút mới của mình

mà chỉ được dùng các nút cơ bản của nó. Một hình dạng hình học bất kỳ có thể được xây
dựng qua nút Shape. Cấu trúc của nút này có dạng như sau:
Shape{
appearance Appearance{
material Material{
diffuColor 1 0 0
Shininess 0
}
textture ImageTextTure{}
}
geometry Box{}
}
trong đó appearance là thuộc tính của nút giá trị của nó chỉ có thể là nút Appearance dùng
chỉ dạng bề mặt của vật thể . Trong nút Appearance co các trường material dùng để chỉ
màu, độ bóng, độ trong suốt của vật thể. Trường textture dùng để chỉ kết cấu của vật thể,
giá trị của trường này có thể là các nút ImageTextture,MovieTextture...
Chúng ta điểm qua một số nút cơ bản
Nguyễn Vĩnh Thuận –CNPM K46
7
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à thực tại ảo Ngôn ngữ VRML

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
Thông thường khi bạn tạo ra một đối tượng tâm của nó trùng với tâm của hệ toạ độ
địa phương, để di chuểyn đối tượng bạn dùng nút Transform.

Transform{
Scale Chỉ sự biến đối của đối tượng
Translation chỉ các giá trị dịch chuyển theo các trục x, y, z
Rotation chỉ góc quay và trục quay
Children[] các nút con chịu tác động của translation và rotation
}
Trong nút Transform Scale có tác động đầu tiên, sau đó đến rotation và translation
Để gom nhiều nút lại với nhau ta sử dụng nút Group, cú pháp của nó như sau:
Group{
Children[] chứa các nút con của nút này
Nguyễn Vĩnh Thuận –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

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.
Nguyn Vnh Thun CNPM K46
17
ho mỏy tớnh v thc ti o Ngụn ng VRML

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

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 {
Nguyn Vnh Thun CNPM K46
18
ho mỏy tớnh v thc ti o Ngụn ng VRML

}
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
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
Nguyn Vnh Thun CNPM K46
19
ho mỏy tớnh v thc ti o Ngụn ng VRML

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
SFFloat maxFront 10
SFFloat minBack 1
SFFloat minFront 1
SFFloat priority 0
SFNode source NULL
SFBool spatialize TRUE
}
Nguyn Vnh Thun CNPM K46
20

ho mỏy tớnh v thc ti o Ngụn ng VRML

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
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ị
Nguyn Vnh Thun CNPM K46
21

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

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