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]
Trang 1(c) SE/FIT/HUT 2002
Ngôn ngữ mô hình hóa thực tại ảo
VRML
(c) SE/FIT/HUT 2002
VRML ? Lịch sử
VRML là một ngôn ngữ văn bản dùng để mô tả các môi trường tương tác
và các vật thể 3-D
Các file text VRML có đuôi là wrl
VRML 1.0 dựa trên ngôn ngữ mô tả Silicon Graphics 3D gọi là “Open Inventor” VRML 1.0 cho phép mô tả các cảnh tỉnh và không tương tác
VRML 2.0 là một ngôn ngữ mô tả dựa trên Silicon Graphics và được goi là “Moving Worlds”
VRML1 (1994) & VRML2 (1997) có mở rộng thêm các chủ đề liên quan
(c) SE/FIT/HUT 2002
Tính chất
Bạn có thể xem các 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 một trình duyệt HTML
Bạn có thể xem các 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 của trang Web
Nhúng vào các ứng dụng đa thời gian
Bạn có thể tạo các file VRML nhờ :
Một trình soạn thảo văn bản đơn giản
Một chương trình ứng dụng
Một trình dịch định dạng và mô hình hóa 3D
Một ngôn ngữ tạo vật thể (như ngôn ngữ kịch bản Perl )
(c) SE/FIT/HUT 2002
Cấu trúc file VRML
Trong file VRML gồm có :
Đầu đề của file
Comments – chú thích
của bạn
Nodes – nút chứa các
thông tin quan trọng của cảnh vật
Fields – các thuộch tính
của nút mà bạn có thể thay đổi
Values – các 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 chú thích bắt đầu với ký tự #
Ký tự # trong nháy kép không phải bắt đầu chú thích.
Chú ý rằng dòng đầu của VRML 2.0 là :
#VRML 2.0 utf8
và là bắt buộc !
Từ khóa utf dùng để nói đến bộ ký tự quốc tế UTF-8 được
dùng trong file.
Lời chú thích và khoảng trắng có thể không được bảo toàn
bởi VRML document server.
Phần tử cơ bản của VRML: Nút
Một file VRML gồm có một danh sách các nút, mỗi nút chứa một phần thông tin mô tả toàn cảnh
Một nút có thể định nghĩa hình dạng vật thể, hay thuộc tính của của một
đối tượng , như màu màu sắc và hệ tọa độ của nó
Mỗi nút có một tên, theo sau là cặp dấu { } có thể không chứa trường nào hoặc nhiều trường
Một câu lệnh trường gồm có tên trường sau đó có thể có một hay nhiều giá trị.Các trường có thể được viết theo các trật tự khác nhau
Tên của nút bắt đầu bằng ký tự hoa, tên trường bắt đầu bằng ký tự
thường (case sensitive).
Ví dụ về nút
Shape, Box, Appearance, Material,lights, sounds,
Trang 2(c) SE/FIT/HUT 2002
Cấu trúc phân lớp
Nút Shape chứa hai trường, geometry và appearance, mỗi trường lại
chứa các nút khác được coi như giá trị của chúng.
Shape
{ appearance NULL exposedField SFNode
geometry NULL exposedField SFNode
}
Đôi khi nút Shape có một trường Appearance nhưng không có trường
geometry (ví dụ như các vật thể không nhìn thấy!)
Trường geometry chứa nút Box và trường appearance coi nút
Appearance như là giá trị của có.
Nút Appearance lại chứa một nút khác là Material.
Câu trúc cây của nút mà nút lại được chứa trong 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 một lớp thành các khoanh có thể quản lý được
Mỗi nút riêng lẻ thì rất đơn giản, sự kết nối giữa các nút cho phép tạo ra 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 có thể trùng lên nhau khi chúng được tạo nên ở cùng một
vị trí
Bạn nên xem và sử dụng một trong các trường geometries sau
zShape
geometry
material
zBox
zMaterial
diffuseColor
(c) SE/FIT/HUT 2002
Cơ bản về nút shape
Box {size 8 12 10 # x, y, z (=w, h, d)
}
Cone { bottomRadius 5 # so 10 units wide
}
Nút Shape là những viên gạch
tạo nên thế giới VRML Các nút
Shape gốc là các khối chuẩn :
• Box
• Cone
• Cylinder
• Sphere
• Text
Các trường của nút Geometry
điều khiển kích thước
Kích thước thường có đơn vị là m,
nhưng có thể bất cứ đơn vị gì
(c) SE/FIT/HUT 2002
Cơ bản về nút shape
Cylinder { radius 4 # chiều rộng là 8
bottom TRUE # “cup” có cạnh và đáy
top FALSE # nhưng không có đỉnh }
Sphere # đơn giản nhất trong các nút shape { radius 2 # nhưng cũng là phức tạp } Xem code Chạy ví dụ
Nút text
Tránh tạo ra các đặc tả kỹ thuật Web-based 3D/VR
Text rất hữu ích ở các hệ chuyên gia,ví dụ như trong khoa học về trực quan
Text
{ string “Hi!” # multi-field
length 0 # stretch to this width (0=natural width)
fontStyle FontStyle
{ family “SERIF” # or SANS or TYPEWRITER
style “PLAIN” # or BOLD ITALIC
}
} Xem code Chaỵ ví dụ
Cấu trúc ảnh bitmap
Sử dụng ảnh bitmap thay cho một mô hình 3D thật cụ thể 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ó thể có những bất lợi sau:
Cấu trúc của ảnh sẽ được gủi cho trình duyệt ,có thể phải qua một quá trình thông tin chậm
Thiết kế một ảnh bitmap và đưa nó lên màn hình là công đoạn xử lý khá là kỹ lưỡng
Trang 3(c) SE/FIT/HUT 2002
Cấu trúc trong VRML
Appearance
{ texture ImageTexture
{ url “skin.gif” # GIF, JPG or PNG
repeatSTRUE # repeat or stretch?
repeatT TRUE
}
Các Texture có thể là một URL đầy đủ hoặc chỉ là một URLtương đối đơn
giản như sử dụng ở trên
Có ba kiểu nút texture là : ImageTexture, MovieTexture and PixelTexture
(c) SE/FIT/HUT 2002
Hệ tọa độ
Một file VRML xây dựng nên các thành phần của thế giới VRML
Một file thành được xây dựng trong thế giới hệ toạ độ
Theo mặc định , tất cả các vật thể được xây dựng từ gốc của hệ toạ độ
VRML sử dụng hệ toạ độ thuận hệ toạ độ Đề Các
Đơn vị chuẩn đo chều dài và khoảng cách trong VRML là m
Góc là radian
Một vòng quay là 2π radian
360 là 2π radian, khoảng 6.28 radian,
90 là π/2 radian, khoảng 1.57 radian
(c) SE/FIT/HUT 2002
Chuyển đổi một hệ toạ độ
Một nút transform tạo ra một hệ toạ
độ có:
Positioned :gốc
Rotated :góc quay
Scaled :tỷ lệ
Liên hệ với hệ toạ độ cha của nó
Các vật thể được xây dựng trong hệ
toạ độ mới được định vị ,quay và tỷ lệ
cùng với nó
Nhóm các nút Transform tạo ra
một nhóm với hê toạ độ của chính nó
• rotation – hướng
• scale – kích cỡ
• translation – vị trí
• children – các vật thậ tạo Transform {
translation rotation scale children [ ] }
(c) SE/FIT/HUT 2002
Trường children
Trường children bao gồm một danh sách một hay nhiều nút
Transform { children [ Shape { } Shape { } Transform { } ] }
Nút transform
Trường Translation định vị hệ toạ
độ bởi X,Y và Z
Transform { # X Y Z
translation 2.0 0.0 0.0 children
[ ]}
Trường Scale để co hay giản một
hệ toạ độ dựa vàu hệ số tỷ lệ ở
các trục X, Y, và Z
Transform { # X Y Z scale 0.5
0.5 0.5 children [ ] }
Trường Rotation định hướng hệ toạ độ
quay quoanh một cạnh bởi một góc quay
•Góc thường được đu bằng đơ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 và dịch một hệ toạ độ, cái này sau cái kia 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 hiện từ dưới lên bottom-up:
Trường children được co giãn ,xoay rồi sau đó mới dịch
Thứ tự giữa các trường được ấn định, độc lập với trật tự của các trường Xem code Chạy ví dụ
Trang 4(c) SE/FIT/HUT 2002
nút Appearance
Các vật thể gốc có màu phát ra từ bề
ngoài là màu trắng
Bạn có thể điều khiển màu của một
vật thể:
•Màu bóng
•Màu phát ra
•Tính trong suốt
•Tính không chiếu sáng
•Cường độ ánh sáng bao
quanh
Một nút Appearance miêu tả toàn
bộ hình dạng của vật thể
• Trường material gồ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 thuộc tính về chất liệu của vật thể
•diffuseColor – màu bóng chính
•emissiveColor – màu phát chính
•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út Material cũng có thể điều khiển tính chiếu sáng của một vật thể
• specularColor – điểm có màu nổi bật nhất
• shininess – kích cở chỗ nổi bật nhấ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 chúng ta cẩn nhóm các
đối tượng lại với nhau 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
Có thể chính các nút con là các nút
group
Có các kiểu nút group sau:
Bạn có thể nhóm các vật thể lại với nhau để tạo thành một 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 như trong trang Web , siêu liên kết cũng sẵn có trong VRML
Có thể kết nối tới các kiểu dữ liệu hợp lệ , bao gồm các trang VRML khác, các trang HTML và các ứng dụng CGI
Vị trí (x, y, z) của con trỏ có thể được truyền tới URL, chỉ thực sự có ích với các ứng dụng CGI
Trang 5(c) SE/FIT/HUT 2002
Các nút Group-Switch-Transform
Nút Group tạo ra các nút cơ bản
khác
Mỗi nút child trong group là được
hiển thị
Group { children [ ] }
Nút nhóm Switch tạo ra một nhóm có
thể chuyển cho nhau
Chỉ có một nút child group is
trong nhóm là được hiển thị
Bạn chọn nút child nào
•Nút con được đánh số tường
minh từ 0
•A -1 không chọn nút con nào
Switch { whichChoice 0 choice [ ]
}
Xem code Chaỵ ví dụ
Nút Transform tạo ra một nhóm dựa
trên chính hệ toạ độ của nó
Mỗi nút child là đượ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 Billboard tạo ra một nhóm
với hệ toạđộ đặc biệt
•Mỗi nút child được hiển thị
displayed
•Hệ toạ độ trở lại mặt xem
Billboard { axisOfRotation 0.0 1.0 0.0 children [ ] }
(c) SE/FIT/HUT 2002
Nút Anchor và Inline
Nút Anchor tạo ra một nhóm mà hoạt
động như kiểu có thể kích chuột được
Chỉ nút child là được hiển thị
Kích chuột 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 [ ] }
Nút Inline tạo ra một nhóm đặc biệt từ
nội dung của một file VRML khác
Nút con đọc từ file được chọn bởi URL
Mỗi nút child là đượ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
Nếu nhiều vật thể giống nhau về các
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 nhau
Thay vào đó , định nghĩa một tên
cho nút tìm thấy đầu tiên
Sau đó, sử dụng tên đấy để chia sẻ
cho nút tương tự ở trong ngữ cảnh
mới
Cú pháp DEF tạo ra tên cho một
nút
Shape { appearance Appearance { material
DEF RedColor Material { diffuseColor 1.0 0.0 0.0 } } geometry }
DEF bắt buộc phải ký tự hoa
Có thể đặt tên cho một nút nào đấy
Tên có thể là hầu hết các chuỗi ký
tự và số
Trong một file tên phải là duy nhất
(c) SE/FIT/HUT 2002
Từ khóa use
Từ khoá USE cho phép sử dụng
một nút đã được đặt tên trước
Shape { appearance Appearance { material
USE RedColor } geometry }
Xem code Chạy ví dụ
USE bắt buộc phải là chử hoa
Sử dụng lại nút đã được đặt tên gọi là một biến hay một thể hiện
Một nút đã được đặt tên có thể có một vài thể hiện
Mỗi thể hiện chia sẻ cùng một miêu tả về nút đấy
Chỉ có thể có thể hiên mà tên của nút đã được định nghĩa trong cùng một file
ưu điểm
Đặt tên và sử dụng nút:
Lưu những gì đã đánh vào
Giảm kích thước file
Cho phép thay đổi nhanh chóng các vật thể có cùng thuộc tính
Tăng tốc độ cho quá trình xử lý trên trình duyệt
Tên cũng cần thiết cho cảnh động
Giới thiệu hoạt cảnh
Các nút như Billboard và Anchor có các hành động xây dựng sẵn
Bạn có thể tạo ra hành động của riêng bạn như làm cho các vật thể có thể di chuyển,xoay, co giãn và hơn thế nữa
Chúng ta cần một phương thức để kích , thời gian hoá, và đáp ứng một chuỗi các sự kiện theo một trật tự để một sự tương tác tốt hơn giữa người dùng và thế giới bên ngoài
Hầu hết các nút đều có thể là thành phần trong một dòng hoạt cảnh
Nút hoạt động như các phần điện tử ảo
Nút có thể gửi và nhận các sự kiện
Các đường dây nối các nút lại với nhau
Một sự kiện là một thông báo được gửi giữa các nút
Một giá trị dữ liệu (giống như sự dịch chuyển)
Thời gian hoàn thành (Khi sự kiện được chứng nhận là đã được gửi)
Trang 6(c) SE/FIT/HUT 2002
Thêm các sự kiện
Để quay một vật thể:
• Nối một nút mà gửi sự kiện rotation với trường rotation của nút
Transform
Để làm một vật thể nhấp nháy:
• Nối nút gửi sự kiện color vớii trường diffuseColor của nút
Material
(c) SE/FIT/HUT 2002
Cài đặt hoạt cảnh
Để cài đặt một dòng hoạt cảnh , bạn cần ba thứ :
Một nút gửi sự kiện
Nút phải được đặt tên với câu lệnh DEF
Một nút nhận sự kiện
Nút phải được đặt tên với câu lệnh DEF
Một đường dây kết nốichúng lại
Mỗi nút có các trường , thông tin vào và thông tin cần có:
field: Một giá trị dữ liệu được lưu trử
eventIn: đầu vào
eventOut: đầu ra
Một trường exposedField viết gọn cho một giá trị dữ liệu, đầu vào và đầu
ra
(c) SE/FIT/HUT 2002
Các ví dụ Vào- ra
Nút OrientationInterpolator
có sự kiện ra :
value_changed đưa ra giá trị
góc xoay
NútPositionInterpolator có
sự kiện ra :
value_changed đưa ra vị trí
Nút TimeSensorcó sự kiện ra:
time đưa ra thời gian
NútTransformcó các sự kiện vào:
set_translation
set_rotation
set_scale
NútMaterialcó các sự kiện vàu:
set_diffuseColor
set_emissiveColor
set_transparency
(c) SE/FIT/HUT 2002
Từ khóa route
Câu lệnh ROUTE cho phép kết nối
hai nút lại với nhau :
Tên nút gửi và sự kiện ra
Tên nút nhận và sư kiện vàu
ROUTE MySender.rotation_changed
TO MyReceiver.set_rotation
ROUTE và TO bắt buộc phải là
ký tự hoa
Các quy ước về đặt tên
Hầu hết các nút đều có exposedFields
Nếu trường exposed tên là xxx, thì:
•set_xxx là một sự kiện vào
được gán cho trường
•xxx_changed là sự kiện ra
được gửi đi khi trường đó thay
đổi
•Các tiếp ngữ set_ và _changed
là tuỳ chọn nhưng nên có để phân biệt
Nút Transform có:
Trường rotation
•Sự kiện vào set_rotation
•Sự kiện ra rotation_changed
Hoạt cảnh
Hoạt cảnh cho phép thay đổi qua thời gian:
• Vị trí – một ô tô đang đi
• Hướng - một máy bay đang lượn
• Màu sắc – đổi mùa
Hoạt cảnh bắt buộc điều khiển qua thời gian:
• Khi nào thì bắt đầu và dừng
• Mức độ nhanh chậm
điều khiển thời gian
Nút TimeSensor cho phép bạn điều khiển thời gian bắt đầu và kết thúc
Nút cảm ứng tạo sự kiện thời gian khi nó đang chạy
Để kích hoạt , dẫn các sự kiện thời gian tới các nút khác
Nút TimeSensor tạo ra hai sự kiện thời gian là absolute and fractional
Sự kiện thời gian Absolute tạo ra thời gian thực
• Thời gian tuyệt đối được đu bằng giây từ 12:00h mồng 1 tháng 1 năm 1970!
• Rất có ích cho việc triệu gọi một sự kiện ở thời gian cụ thể
Trang 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 các giá trị số từ 0.0 tới 1.0
Khi nút cảm ứng thời gian bắt đầu , đầu ra của nó là 0.0
Kết thúc một chu kỳ_ cycle, đầu ra của nó là 1.0
Số giây giữa 0.0 và 1.0 được xác định bởi xung tuần hoàn_ cycle
interval
Cảm biến thời gian có thể chạy mãi , hoặc chỉ chạy qua một vòng rồi
dừng
(c) SE/FIT/HUT 2002
Nút timesensor
Nút TimeSensor tạo ra các sự kiện
dựa vào thời gian
Thời gian bắt đầu_ startTime và thời gian kết thúc_ stopTime khi
chạy
Thời gian tuần
hoàn_cycleInterval thời gian cho
một chu kỳ là bao lâu
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 ra bộ 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 khi stop time:
loop TRUE
stopTime > startTime
Để chạy một vòng rồi sau đó dừng:
loop FALSE
stopTime <= startTime
Sự kiện vào dữ liệu set_startTime :
đặt khi bộ thời gian sắp bắt đầu
Sự kiện vàu dữ liệu set_stopTime :
đặt khi bộ thời gian kết thúc
(c) SE/FIT/HUT 2002
Trường ra dữ liệu
Trường ra dữ liệuisActive :
Ra dữ liệu là TRUE khi bộ thời gian bắt
đầu
Ra dữ liệu là FALSE khi bộ thời gian
kết thúc
Trường ra dữ liệutime :
Đưa ra thời gian tuyệt đối
Trường ra dữ liệufraction_changed :
Đưa ra các giá trị từ 0.0 tới 1.0 trong
suốt một chu ký
Đặt lại giá trị 0.0 lúc bắt đầu mỗi chu
kỳ
Xem code Chạy ví dụ
(c) SE/FIT/HUT 2002
Chuyển đổi thời gian ra toạ độ
Để kích hoạt vị trí của một vật thể VRML cung cấp:
•Một danh sách khoá về vị
trí key positions cho đường
di chuyển
•Thời gian bắt đầu ở mỗi vị trí
Nút interpolator có thể chuyển đổi
một đầu vàu thời gian thành một
đầu ra toạ độ
•Khi thời gian ở giữa hai khoá vị trí, nút interpolator
sẽ tính toán vị trí trung gian
Mỗi khoá vị trí cùng với đường dẫn có:
Một khoá giá trị key value
(như là một vị trí)
Một khoá thời gian phân đoạn
Phép nội suy sẽ điền vàu các giá trị vàu giữa các giá trị khoá:
Fractional TimePosition
0
0.1
1
Nút positioninterpolator
Nút PositionInterpolator miêu
tả vị trí của đườ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 sự kiện đầu
vào set_translation của nút
Transform
Sự kiện đầu vào set_fraction :
• Đặt thời gian phân đoạn hiện thời theo khoá đường dẫn
Sự kiện đầu ra value_changed :
• Đưa ra vị trí theo đường dẫn mỗi khi fraction được
đặt Xem code Chạy ví dụ
Sử dụng các nút interpolator khác
Kích hoạt vị trí PositionInterpolator
Kích hoạt hướng OrientationInterpolator
Kích hoạt co giãn Position Interpolator
Kích hoạt màu sắc ColorInterpolator
Kích hoạt tính trong suốt ScalarInterpolator