VRML dïng nót Group ®Ó thùc hiÖn ®iÒu nµy Nót Group cã thÓ cã c¸c nót con.. Xem code Chaþ vÝ dô}[r]
(1)(c) SE/FIT/HUT 2002
Ngôn ngữ mô hình hóa thực ảo VRML
(c) SE/FIT/HUT 2002
VRML ? LÞch sư
VRML ngôn ngữ văn dùng để mô tả môi tr−ờng t−ơng tác vật thể 3-D
Các file text VRML có đuôi wrl
VRML 1.0 dựa ngôn ngữ mô tả Silicon Graphics 3D gọi Open Inventor VRML 1.0 cho phép mô tả cảnh tỉnh không tơng tác
VRML 2.0 ngôn ngữ mô tả dựa Silicon Graphics đợc goi Moving Worlds
VRML1 (1994) & VRML2 (1997) có mở rộng thêm chủ đề liên quan
(c) SE/FIT/HUT 2002
TÝnh chất
Bạn xem file VRML nhờ trình duyệt VRML : Một ứng dụng hỗ trỵ VRML
Một ứng dụng VRML nhúng vào trình duyệt HTML Bạn xem file VRML từ đĩa cứng , hay qua mạng Internet
Toµn bé trang Web Nhóng vµo trang Web Toµn bé khung cđa trang Web Nhóng vào khung trang Web Nhúng vào ứng dụng đa thời gian Bạn tạo file VRML nhê :
Một trình soạn thảo văn đơn giản Một ch−ơng trình ứng dụng
Một trình dịch định dạng mơ hình hóa 3D Một ngơn ngữ tạo vật thể (nh−ngơn ngữ kịch Perl )
(c) SE/FIT/HUT 2002
CÊu tróc file VRML
Trong file VRML gồm có : Đầu đề file Comments– thớch
của bạn
Nodes nút chứa thông tin quan trọng cảnh vật
Fields thuộch tính nút mà bạn thay i
Values thuộc tính giá trị
Vµ
#VRML V2.0 utf8
# example1.wrl - a yellow box Shape
{ geometry Box{ } # default box appearance Appearance # override appearance
{material Material # with a new material
{diffuseColor 1.0 1.0 0.0 # yellow
} } }
Comments-chú thích
Lời thích bắt đầu với ký tù #
Ký tù # nháy kép bắt đầu thích.
Chú ý dòng đầu VRML 2.0 :
#VRML 2.0 utf8
và bắt buộc !
Từ khóautfdùng để nói đến ký tự quốc tế UTF-8 đ−ợc
dïng file.
Lời thích khoảng trắng không đợc bảo toàn
bởi VRML document server.
Phần tử VRML: Nút
Một file VRML gồm có danh sách nút, nút chứa phần thông tin mô tả toàn cảnh
Một nút định nghĩa hình dạng vật thể, hay thuộc tính của đối t−ợng , nh−màu màu sắc hệ tọa độ
Mỗi nút có tên, theo sau cặp dấu { } không chứa trờng hc nhiỊu tr−êng
Một câu lệnh tr−ờng gồm có tên tr−ờng sau có hay nhiều giá trị.Các tr−ờng đ−ợc viết theo trật tự khác Tên nút bắt đầu ký tự hoa, tên tr−ờng bắt đầu ký tự
th−êng (case sensitive) VÝ dụvềnót
(2)(c) SE/FIT/HUT 2002
CÊu tróc ph©n líp
NútShapechứa hai trờng,geometryvàappearance, trờng lại chứa nút khác đợc coi nhgiá trị chúng
Shape
{ appearance NULL exposedField SFNode geometry NULL exposedField SFNode }
Đôi nút Shapecó trờng Appearancenhng trờng geometry (ví dụ nhcác vật thể không nhìn thấy!)
Trờng geometrychứa nútBoxvà trờng appearancecoi nút Appearancenhlà giá trị có
Nút Appearancelại chứa nút khác làMaterial.
Câu trúc nút mà nút lại đợc chứa nút khác gäi lµscene graph
(c) SE/FIT/HUT 2002
CÊu tróc c¶nh
VRML giúp bạn chia lớp thành khoanh quản lý đ−ợc Mỗi nút riêng lẻ đơn giản, kết nối nút cho phép tạo
c¸c lớp phức tạp
Nút shapeđợc tạo nên trung t©m cđa thÕ giíi VRML Mét file VRML cã thĨ chøa nhiỊu nót shape
C¸c nót shape trùng lên chúng đợc tạo nên vị trí
Bạn nên xem sử dụng trờng geometries sau zShape
geometry
appearance zAppearance
material zBox
zMaterial
diffuseColor
(c) SE/FIT/HUT 2002
Cơ vỊ nót shape
Box
{size 12 10 # x, y, z (=w, h, d)
}
Xem code Ch¹y vÝ dơ
Cone
{ bottomRadius # so 10 units wide
height 12
side TRUE
bottom TRUE
Xem code Chạy ví dụ
} Nút Shapelà viên gạch
tạo nên giới VRML Các nút Shape gốc khối chuẩn:
ã Box
• Cone
• Cylinder
• Sphere
• Text
Các trờng nút Geometry điều khiển kÝch th−íc
Kích th−ớc th−ờng có đơn vị m, nh−ng đơn vị
(c) SE/FIT/HUT 2002
Cơ nút shape
Cylinder
{ radius # chiÒu réng lµ
height
bottom TRUE # “cup” có cạnh đáy
side TRUE
top FALSE # nh−ng khơng có đỉnh }
Xem code Ch¹y vÝ dô
Sphere # đơn giản nút shape { radius # nh−ng phức tạp } Xem code Chạy ví dụ
Nót text
Tránh tạo đặc tả kỹ thuật Web-based 3D/VR
Text hữu Ých hệ chuyên gia,ví dụ nhtrong khoa học trùc quan Text
{ string “Hi!” # multi-field
length # stretch to this width (0=natural width) fontStyle FontStyle
{ family “SERIF” # or SANS or TYPEWRITER style “PLAIN” # or BOLD ITALIC
size
}
} Xem code Chaỵ ví dụ
CÊu tróc ¶nh bitmap
Sư dơng ¶nh bitmap thay cho mô hình 3D thật cụ thể tiết kiệm đợc nhiều thời gian xử lý
Tuy vËy viƯc sư dơng réng r·i ảnh bitmap có bất lợi sau: Cấu trúc ảnh đợc gủi cho trình duyệt ,có thể phải qua
quá trình thông tin chËm
(3)(c) SE/FIT/HUT 2002
CÊu tróc VRML
Appearance
{ texture ImageTexture
{ url “skin.gif” # GIF, JPG or PNG repeatSTRUE # repeat or stretch? repeatT TRUE
}
} Xem code Ch¹y vÝ dơ
Các Texture URL đầy đủ URLt−ơng đối đơn giản nh−sử dụng
Cã ba kiĨu nót texture lµ : ImageTexture, MovieTexture and PixelTexture
Xem code Ch¹y vÝ dơ
(c) SE/FIT/HUT 2002
Hệ tọa độ
Một file VRML xây dựng nên thành phần giới VRML Một file thành đ−ợc xây dựng giới hệ toạ độ
Theo mặc định , tất vật thể đ−ợc xây dựng từ gốc hệ toạ độ VRML sử dụng hệ toạ thun h to Cỏc
Đơn vị chuẩn đo chều dài khoảng cách VRML m Góc radian
Một vòng quay 2radian 360 2radian, khoảng 6.28 radian,
90 là/2 radian, khoảng 1.57 radian
(c) SE/FIT/HUT 2002
Chuyển đổi hệ toạ độ
Một nút transformtạo hệ toạ độ có:
Positioned :gèc Rotated :gãc quay Scaled :tû lÖ
Liên hệ với hệ toạ độ cha Các vật thể đ−ợc xây dựng hệ
toạ độ đ−ợc định vị ,quay tỷ lệ với
Nhóm nút Transformtạo nhóm với toạ độ
• rotation– h−íng • scale– kÝch cì • translation vị trí ã children vật thậ tạo Transform {
translation rotation scale children [ ] }
(c) SE/FIT/HUT 2002
Tr−êng children
Tr−êng childrenbao gåm mét danh s¸ch mét hay nhiỊu nót
Transform {
children [ Shape { } Shape { } Transform { } ] }
Nót transform
Tr−ờngTranslationđịnh vị hệ toạ độ X,Y Z
Transform { # X Y Z translation 2.0 0.0 0.0 children [ ]}
Tr−ờngScaleđể co hay giản hệ toạ độ dựa vàu hệ số tỷ lệ trục X, Y, Z
Transform { # X Y Z scale 0.5 0.5 0.5 children [ ] }
Tr−ờngRotationđịnh h−ớng hệ toạ độ quay quoanh cạnh góc quay
•Góc th−ờng đ−ợc đu đơn vị radian
• radian = độ/ 180.0 * 3.141 Transform { # X Y Z Angle rotation 0.0 0.0 1.0 0.52 children [ ] }
Nót transform
Co giãn , xoay dịch hệ toạ độ, sau Transform {
translation 2.0 0.0 0.0 rotation 0.0 0.0 1.0 0.52 scale 0.5 0.5 0.5 children [ ]}
Các thao tác đ−ợc thực từ d−ới lên bottom-up: Tr−ờng children đ−ợc co giãn ,xoay sau dịch
Thứ tự tr−ờng đ−ợc ấn định, độc lập với trật tự tr−ờng
(4)(c) SE/FIT/HUT 2002
nót Appearance
C¸c vật thể gốc có màu phát từ bề màu trắng
Bạn điều khiển màu vật thể:
ãMu búng ãMu phỏt •Tính suốt •Tính khơng chiếu sáng •C−ờng độ ánh sáng bao
quanh
Mét nót Appearancemiªu tả toàn hình dạng vật thể
ã Tr−êngmaterialgåm c¸c thuéc tÝnh nh−color, transparency, etc Shape {
appearance Appearance { material }
geometry }
(c) SE/FIT/HUT 2002
nót Material
Mét nót Material®iỊu khiĨn c¸c thc tÝnh vỊ chÊt liƯu cđa vËt thĨ ãdiffuseColor màu bóng
ãemissiveColor màu phát ãtransparency Trong suèt hay kh«ng Shape {
appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 emissiveColor 0.0 0.0 0.0 transparency 0.0 } }
geometry }
(c) SE/FIT/HUT 2002
Nót material
NútMaterialcũng điều khiển tính chiếu sáng vật thể ã specularColor điểm có màu bật
ã shininess kích cở chỗ bật
ã ambientIntensity hiêu ứng ánh sáng xung quanh Shape {
appearance Appearance { material Material { specularColor 0.71 0.70 0.56 shininess 0.16
ambientIntensity 0.4 } }
geometry } Xem code Chạy ví dụ
(c) SE/FIT/HUT 2002
Bảng mµu th−êng dïng
0.12 0.83 0.83 0.83 0.20 0.20 0.71
0.10 Plastic Blue
0.20 0.61 0.13 0.18 0.27 0.00 0.00
0.15 Metalic Red
0.20 0.64 0.00 0.98 0.10 0.03 0.22
0.17 Metalic Purple
0.16 0.71 0.70 0.56 0.22 0.15 0.00
0.40 Gold
0.08 0.75 0.33 0.00 0.30 0.11 0.00
0.26 Copper
0.10 0.70 0.70 0.80 0.30 0.30 0.50
0.30 Aluminum
shininess specular
Color diffuse
Color ambient
Intensity Mô tả
nút Group
Thơng th−ờng cẩn nhóm đối t−ợng lại với VRML dùng nút Group để thực điều Nút Group có nút Có thể nút nút
group
Cã c¸c kiĨu nót group sau:
Bạn nhóm vật thể lại với để tạo thành vật thể phức tạp
VRML cã nhiỊu nót group bao gåm Group { }
Switch { } Transform { } Billboard { } Anchor { } Inline { }
Xem code Chaỵ ví dụ
Billboard Switch
Collision Inline Anchor
LOD Group Transform
KÕt nèi tíi mét vị trí khác
Cũng nhtrong trang Web , siêu liên kết sẵn có VRML Có thể kết nối tới kiểu liệu hợp lệ , bao gåm c¸c trang VRML
kh¸c, c¸c trang HTML ứng dụng CGI
(5)(c) SE/FIT/HUT 2002
C¸c nót Group-Switch-Transform
Nút Grouptạo nút khác
Mỗi nút childtrong group đợc hiển thị
Group { children [ ] } Nót nhãm Switcht¹o mét nhãm cã
thĨ chun cho ChØ cã mét nót childgroup is
trong nhóm đợc hiển thị Bạn chọn nút child
ãNỳt c ỏnh s tng minh t
ãA -1không chọn nút Switch { whichChoice choice [ ]
}
Xem code Chaỵ ví dụ
Nút Transformtạo nhóm dựa h to ca nú
Mỗinút childlà đợc hiĨn thÞ Transform {
translation 0.0 0.0 0.0 rotation 0.0 1.0 0.0 0.0 scale 1.0 1.0 1.0 children [ ] } Nót nhãm Billboardt¹o nhóm
vi h to c bit
ãMỗi nútchildđợc hiển thị displayed
ãH to tr li mặt xem Billboard {
axisOfRotation 0.0 1.0 0.0 children [ ] }
(c) SE/FIT/HUT 2002
Nót Anchor vµ Inline
Nút Anchortạo nhóm mà hoạt động nh−kiểu kớch chut c
Chỉ nútchildlà đợc hiển thị KÝch cht vµo nót child theo sau
bëi mét URL
Tr−ờng descriptionđặt tên cho nút anchor
Anchor { url "stairwy.wrl" description "Twisty Stairs" children [ ] }
Xem code Ch¹y vÝ dơ
NútInlinetạo nhóm đặc biệt từ nội dung file VRML khác
Nút đọc từ file đ−ợc chọn URL
Mỗi nútchildlà đợc hiển thị Inline { url "table.wrl" } Inline {
url "table.wrl" } Transform {
translation -0.95 0.0 0.0 rotation 0.0 1.0 0.0 3.14
children [ Inline { url "chair.wrl" } ] }
Xem code Ch¹y vÝ dơ
(c) SE/FIT/HUT 2002
Đặt tên
Nu nhiều vật thể giống yếu tố hình học hay hình dạng , bạn phải dùng nhiều nút giống hệt Thay vào , định nghĩamột tên
cho nút tìm thấy Sau đó, sử dụngtên để chia sẻ
cho nót tơng tự ngữ cảnh
Cú pháp DEFtạo tên cho nút
Shape {
appearance Appearance { material
DEF RedColor
Material { diffuseColor 1.0 0.0 0.0 } } geometry }
DEFbắt buộc phải ký tự hoa Có thể đặt tên cho nút Tên hầu hết chuỗi ký
tù vµ sè
Trong mét file tên phải
(c) SE/FIT/HUT 2002
Tõ khãa use
Từ khoáUSEcho phép sử dụng nút đ−ợc đặt tên tr−ớc
Shape {
appearance Appearance { material
USE RedColor } geometry }
Xem code Ch¹y vÝ dơ
USEbắt buộc phải chử hoa Sử dụng lại nút đ−ợc đặt tên
gọi biến hay thể Một nút đ−ợc đặt tên có
mét vµi thĨ hiƯn
Mỗi thể chia sẻ miêu tả nút Chỉ có thể hiên mà tên
của nút đ−ợc định nghĩa file
−u ®iĨm
Đặt tên sử dụng nút: L−u đánh vào Giảm kích th−ớc file
Cho phép thay đổi nhanh chóng vật thể có thuộc tính Tăng tốc độ cho trình xử lý trình duyệt
Tên cần thiết cho cảnh động
Giíi thiệu hoạt cảnh
Cỏc nỳt nhBillboardvAnchorcú cỏc hnh động xây dựng sẵn Bạn tạo hành động riêng bạn nh−làm cho vật thể cú
thể di chuyển,xoay, co giÃn n÷a
Chúng ta cần ph−ơng thức để kích , thời gian hố, đáp ứng chuỗi kiện theo trật tự để t−ơng tác tốt ng−ời dùng giới bên ngồi
Hầu hết nút thành phần dòng hoạt cảnh Nút hoạt động nh−các phần điện tử ảo
Nút gửi nhận kiện Các đờng dây nối nút lại với Một kiện thông báo đợc gửi nút
Một giá trị liệu (giống nh−sù dÞch chun)
(6)(c) SE/FIT/HUT 2002
Thêm kiện
Để quay vật thể:
ã Nối nút mà gửi kiƯn rotation víi tr−êng rotationcđa nót Transform
§Ĩ làm vật thể nhấp nháy:
ã Nối nút gưi sù kiƯn color víii tr−êng diffuseColorcđa nót Material
(c) SE/FIT/HUT 2002
Cài đặt hoạt cảnh
Để cài đặt dòng hoạt cảnh , bạn cần ba thứ : Một nút gửi kiện
Nút phải đ−ợc đặt tên với câu lệnh DEF Một nút nhận kiện
Nút phải đ−ợc đặt tên với câu lệnh DEF Một đ−ờng dõy kt nichỳng li
Mỗi nút có trờng , thông tin vào thông tin cần có: field:Một giá trị liệu đợc lu trử
eventIn:đầu vào eventOut:đầu
Một trờng exposedFieldviết gọn cho giá trị liệu, đầu vào đầu
(c) SE/FIT/HUT 2002
Các ví dơ Vµo-
Nót OrientationInterpolator
cã kiện :
value_changedđa giá trị gãc xoay
NótPositionInterpolator cã sù kiƯn :
value_changedđa vị trí
Nút TimeSensorcó sù kiƯn ra: time®−a thêi gian
NútTransformcó kiện vào:
set_translation set_rotation set_scale
NútMaterialcó kiện vàu: set_diffuseColor
set_emissiveColor set_transparency
(c) SE/FIT/HUT 2002
Tõ khãa route
C©u lƯnh ROUTEcho phÐp kÕt nèi hai nót l¹i víi :
Tên nút gửi kiện Tên nút nhËn vµ s−kiƯn vµu ROUTE
MySender.rotation_changed TO MyReceiver.set_rotation ROUTEvàTObắt buộc phải
ký tự hoa
Các quy −ớc đặt tên
Hầu hết nút có exposedFields Nếu tr−ờng exposed tờn lxxx, thỡ:
ãset_xxxlà kiện vào đợc gán cho trờng ãxxx_changedlà kiện
đ−ợc gửi tr−ờng thay đổi
•Các tiếp ngữset_ và_changed tuỳ chọn nh−ng nên có để phõn bit
Nút Transformcó: Trờngrotation ãSự kiện vàoset_rotation ãSự kiện rotation_changed
Hoạt cảnh
Hot cảnh cho phép thay đổi qua thời gian: • Vị trí – tơ
• H−ớng - máy bay l−ợn • Màu sắc – i
Hoạt cảnh bắt buộc điều khiển qua thời gian: ã Khi bắt đầu dừng
ã Mc nhanh chm
điều khiển thời gian
Nút TimeSensorcho phép bạn điều khiển thời gian bắt đầu kết thúc Nút cảm ứng tạo kiện thời gian chạy
Để kích hoạt , dẫn kiện thời gian tới nút khác
Nút TimeSensortạo hai sù kiƯn thêi gian lµabsoluteand fractional
Sù kiƯn thêi gian Absolute t¹o thêi gian thùc
• Thời gian tuyệt đối đ−ợc đu giây từ 12:00h mồng tháng năm 1970!
(7)(c) SE/FIT/HUT 2002
sư dơng thêi gian phân đoạn
Sự kiện thời gian phân đoạn nhận giá trị số từ 0.0 tới 1.0 Khi nút cảm ứng thời gian bắt đầu , đầu cđa nã lµ 0.0 KÕt thóc mét chu kỳ_ cycle, đầu 1.0
Số giây 0.0 1.0 đ−ợc xác định xung tuần hồn_ cycle interval
C¶m biÕn thời gian chạy mÃi , chạy qua mét vßng råi dõng
(c) SE/FIT/HUT 2002
Nút timesensor
Nút TimeSensortạo kiện dựa vào thời gian
Thời gian bắt đầu_startTimevà thời gian kết thúc_stopTimekhi chạy
Thời gian tuần
hoàn_cycleIntervalthời gian cho chu kỳ
Lặp_loop có lặp lại hay không TimeSensor {
cycleInterval 1.0 loop FALSE startTime 0.0 stopTime 0.0 }
Để tạo thời gian chạy liên tục: loop TRUE
stopTime<=startTime Khi stop time <= start time,thì stop
time bị bá qua
Ch¹y cho tíi stop time: loop TRUE
stopTime>startTime Để chạy vịng sau dừng:
loop FALSE stopTime<=startTime Sự kiện vào liệu set_startTime:
đặt thời gian bắt đầu
Sự kiện vàu liệuset_stopTime: đặt thời gian kết thúc
(c) SE/FIT/HUT 2002
Tr−êng d÷ liƯu
Tr−êng d÷ liƯuisActive:
Ra liệu làTRUEkhi thời gian bắt đầu
Ra liệu làFALSEkhi thời gian kết thóc
Tr−ờng liệutime: Đ−a thời gian tuyệt đối
Tr−êng d÷ liệufraction_changed: Đa giá trị từ 0.0 tíi 1.0
suèt mét chu ký
Đặt lại giá trị 0.0 lúc bắt đầu chu kú
Xem code Ch¹y vÝ dơ
(c) SE/FIT/HUT 2002
Chuyển đổi thời gian toạ độ
Để kích hoạt vị trí vật thể VRML cung cấp:
ãMột danh sách khoá vị trí key positionscho đờng di chuyển
ãThời gian bắt đầu vị trí
Nỳt interpolatorcú th chuyển đổi đầu vàu thời gian thành đầu to
ãKhi thời gian hai khoá vị trí, nút interpolator tính toán vị trí trung gian
Interpolating positions
Mỗi khoá vị trí với đờng dẫn có:
Một khoá giá trị key value (nhlà vị trí)
Một khoá thời gian phân đoạn Phép nội suy điền vàu giá
trị vàu giá trị khoá: Fractional TimePosition
0.1
Nút positioninterpolator
NútPositionInterpolatormiêu tả vị trí đờng dẫn
ã key khoá thời gian phân đoạn
ã keyValue khoá vị trí PositionInterpolator { key [ 0.0,
] keyValue [ 0.0 0.0 0.0, ] }
Th−ờng để gửi vào kiện đầu vào set_translationcủa nút Transform
Sự kiện đầu vào set_fraction: ã Đặt thời gian phân đoạn thời theo khoá đờng dẫn
Sự kiện đầu value_changed: ã Đa vị trí theo đờng
dn mi fraction c đặt
Xem code Ch¹y vÝ dơ
Sư dơng c¸c nót interpolator kh¸c