1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình đồ họa - Lesson 8 ppt

11 394 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 869,63 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

„ 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

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

}

„ Đô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

geometry

material

zBox

zMaterial diffuseColor

(c) SE/FIT/HUT 2002

Cơ bản về nút shape

{size 8 12 10 # x, y, z (=w, h, d)

} Xem code Chạy ví dụ

„ Cone

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

bottom TRUE # “cup” có cạnh và đáy

}

Xem code Chạy ví dụ

} 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

length 0 # stretch to this width (0=natural width)

fontStyle FontStyle

{ family “SERIF” # or SANS or TYPEWRITER

}

} 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

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

Xem code Chạy ví dụ

(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 [ ] }

„ Xem code Chạy ví dụ

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

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

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

„ Interpolating positions

„ 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

Trang 8

(c) SE/FIT/HUT 2002

„ OrientationInterpolator

„ Nút OrientationInterpolator mô

tả đường dẫn hướng

key – khoá thời gian phân

đoạn

keyValue – khoá về xoay

(gồm cạnh và góc)

„ OrientationInterpolator { key [

0.0, ] }

„ Thường gửi giá trị về góc xoay

vào sự kiện set_rotation của nút

Transform

„ PositionInterpolator

„ Nút PositionInterpolator mô tả

đường dẫn vị trí hay tỷ lệ

key – khoá thời

gian phân đuạn

keyValue – khoá

vị trí (hoặc tỷ lệ)

PositionInterpolator { key [ 0.0, ] keyValue [ 0.0 0.0 0.0, ] }

• Thường gửi giá trị vị trí vào

sự kiện set_scale của nút Transform

(c) SE/FIT/HUT 2002

Colorinterpolator-scalarinterpotator

„ ColorInterpolator

„ Nút ColorInterpolator mô tả đường

dẫn màu sắc

key – khoá thời gian phân

đoạn

keyValue – khoá màu

(đỏ,xanh dương,xanh da trời)

„ ColorInterpolator { key [ 0.0, ] keyValue [ 1.0 1.0 0.0, ] }

„ Thường gửi vàu sự kiện đầu vào

set_diffuseColor hay set_emissiveColor của nút Material

„ Xem code Chạy ví dụ

„ ScalarInterpolator

„ Nút ScalarInterpolator mô tả

đường dẫn vô hướng

key – khoá thời gian phân

đoạn

keyValue – khoá vô

hướng (dùng cho bất cứ vật thể nào)

„ ScalarInterpolator { key [ 0.0, ] keyValue [ 4.5, ] }

„ Thường gửi vào sự kiện

set_transparency của nút Material

„ Xem code Chạy ví dụ

(c) SE/FIT/HUT 2002

nút Sensor

„Có 7 kiểu nút sensor

„Nút sensor dò các hành động của người dùng và phát ra một

sự kiên.

„Bạn có thể liên kết các sự kiện này tới các nút khác để tạo ra

chu kỳ đơn gồm có nguyên nhân_kết quả.

„Bốn bài cuối cùng trong phần “VRML Resources | Example

VRML Worlds” của Website là nhưng ví dụ hay về các nút

sensor và liên kết với các sự kiện.

(c) SE/FIT/HUT 2002

nút Sensor

„Nút ProximitySensor phát hiện ra vị trí quan sát gần nhất

„Nút TouchSensor phát hiện sự kiện kích chuột

„Nút TimeSensor là bộ đếm thời gian

„Tất cả các nút CylinderSensor, PlaneSensor and SphereSensor phát hiện trạng thái kéo các vật thể.

„Nút VisibilitySensor nhận biết một đối tượng là hữu hình đối với người dùng

nút Sensor viewer

„ Motivation

„ Cảm ứng vị trí người dùng cho phép kích hoạt các hoạt cảnh

• Khi một vùng hữu hình đối với người dùng

• Khi người dùng ở trong một vùng nào đó

• Khi người dùng va chạm với một vật thể nào đó

„ LOD và Billboard là các nút đặc biệt có các đáp ứng với viewer sensors

được xây dựng săn

„ Có 3 kiểu nút viewer sensor:

Nút VisibilitySensor cảm biến nếu người dùng có thể thấy một

vùng nào đó a region

Nút ProximitySensor cảm biến khi người dùng đến phạm vi xung

quanh vật thể

Nút Collision cảm biến xung đột giúp điều khiển và phát hiện

xung đột

Dùng visibilitysensor và proximitysensor

„ Hai nút VisibilitySensor và ProximitySensor cảm biến vùng vật thể

dạng hộp

center – tâm vùng

size – kích thước vùng

„ Cả hai nút có đầu ra giống nhau :

Sự kiện enterTime – gửi thời gian vào vùng vào hay lúc hữu hình

Sự kiện exitTime – gửi thời gian vào vùng ra hay lúc không hữu

hình

Sự kiện isActive – gửi true ở vùng vào, false ở vùng ra

Trang 9

(c) SE/FIT/HUT 2002

Nút VisibilitySensor

„ Nút VisibilitySensor cảm biến nếu người dùng nhìn thấy hoặc ngừng

quan sát một vùng nào đó

center và size –tâm và kích thước của vùng

enterTime và exitTime – gửi thời gian vào\ra

isActive –gửi giá trị true/false vào vùng vào\vùng ra

„ DEF VisSense VisibilitySensor { center 0.0 0.0 0.0 size 14.0 14.0 14.0

} ROUTE VisSense.enterTime TO Clock.set_startTime

(c) SE/FIT/HUT 2002

nút ProximitySensor

„ Nút ProximitySensor cảm biến khi người dùng vào/ rời khỏi một vùng nào đó

center và size – kích thước và vị trí của vùng

enterTime và exitTime –gửi thời gian vào vùng vào/vùng ra

isActive – gửi giá trị true/false nếu vào vùng vào/ vùng ra

„ DEF ProxSense ProximitySensor { center 0.0 0.0 0.0 size 14.0 14.0 14.0 } ROUTE ProxSense.enterTime TO Clock.set_startTime

„ ProximitySensor

Nút ProximitySensor cảm biến khi người dùng đang ở trong

vùng

position và orientation –gửi vị trí và hướng khi người dùng

đang ở trong vùng

DEF ProxSense ProximitySensor { } ROUTE

ProxSense.position_changed TO PetRobotFollower.set_translation

Xem code Chạy ví dụ

(c) SE/FIT/HUT 2002

nút Collision

„ Nút Collision cảm biến được khi tầm

quan sát của người dùng vướng các vật

thể

„ collide – cho phép/không cho

phép cảm biến

„ proxy – vật thể đơn giản được

cảm biến thay cho các nút con

„ children – các nút con được cảm

biến

„ collideTime – gửi thời gian khi

người dùng chạm vào vật thể

„ DEF Collide Collision { collide TRUE

proxy Shape { geometry Box { } }

children [ ] } ROUTE

Collide.collideTime TO

OuchSound.set_startTime

„ Tối ưu hoá việc phát hiện xung đột

„ Sự kiện collision luôn được kích hoạt theo ngầm định

„ Tắt nó bất cứ khi nàu có thể!

„ Tuy nhiên, một khi nút collision cha tắt thì nút child không thể bật nó trở lại!

„ Kết quả phát hiện xung đột là từ người dùng va chạm với một vật thể chứ không phải là vật thể va chạm với người dùng

„ Sử dụng nhiều nút sensor

„ Một số nút sensor có thể cảm biến cùng một lúc

„ Bạn có thể tạo ra nhiều nútvisibility, proximity, and collision sensor

„ Các vùng cảm biến có thể chông lên nhau

„ Nếu nhiều nút sensor được kích hoạt, chúng sẽ thực hiện

(c) SE/FIT/HUT 2002

Các nút sensor hành động

„ Có 4 nút sensor hành động chính:

TouchSensor cảm biến khi

chạm vào vật thể

SphereSensor khi kéo chuột

CylinderSensor khi kéo

chuột

PlaneSensor khi kéo chuột

„ Nút Anchor là nút cảm biến

hành động có mục đích đặc biệt

mà các đáp ứng được xây dựng sẵn

„ Cảm biến các vật thể

„Tất cả các cảm biến hành

động cảm biến được tất cả các vật thể cùng nhóm

„Cảm biến được kích hoạt khi khi con trỏ của người dùng chạm phải vật thể được cảm biến

Xem code Chạy ví dụ

Touchsensor và spheresensor

„ Nút TouchSensor cảm biến sự va

chạm của con trỏ

isOver – gửi giá trị true/false

khi con trỏ đang ở trong hay

ở ngoài vùng vật thể

isActive – gửi giá trị

true/false khi chuột được

nhấn hay thả

touchTime –đưa ra thời gian

khi chuột được thả

„ Transform { children [ DEF

Touched TouchSensor { }

Shape { } ] }

„ Nút SphereSensor cảm biến sự

dich chuyển con trỏ tạo ra sự xoayquanh hình cầu

isActive –gửi các giá trị

true/false khi con chuột

được nhấn hay thả

rotation_changed - đưa

ra sự quay khi rê con chuột

„Transform { children [ DEF Rotator SphereSensor { } DEF RotateMe Transform { } ] } ROUTE

Rotator.rotation_changed

TO RotateMe.set_rotation

Cylindersensor-planesensor

„ Nút CylinderSensor nhận biết

con trỏ được rê và làm cho vật thể xoay quanh hình trụ

isActive – gửi giá trị

true/false khi chuột được nhấn hay thả

rotation_changed – làm

cho vật thể quay khi kéo

„ Transform { children [ DEF Rotator CylinderSensor { } DEF RotateMe Transform { } ] } ROUTE

Rotator.rotation_changed

TO RotateMe.set_rotation

„ Xem code Chạy ví dụ

„ Nút PlaneSensor nhận biết con trỏ

được rê và làm dịch chuyển vật thể trên một mặt phẳng

isActive – gửi các giá trị

true/false khi chuột được nhấn hay thả

translation_changed – làm

cho vật thể dịch chuyển khi

rê chuột

„Transform { children [ DEF Mover PlaneSensor { } DEF MoveMe Transform { } ] } ROUTE

Mover.translation_changed TO MoveMe.set_translation

Trang 10

(c) SE/FIT/HUT 2002

Sử dụng nhiều nút sensor

Nhiều nút sensor có thể cảm biến cùng một vật thể nhưng .

• Nếu các nút sensor ở trong cùng một nhóm :

• Tất cả đều có thể đáp ứng các sự kiện

• Nếu các nút sensors có độ sâu khác nhau trong cấu trúc cây của

nút :

• Nút sensor sâu nhất sẽ đáp ứng

• Các nút khác không đáp ứng

(c) SE/FIT/HUT 2002

ví dụ sử dụng các nút sensor

#Clock to drive animations DEF Clock TimeSensor { cycleInterval 10.0 loop TRUE }

# Colour changes for sphere (red -> green -> blue -> red)

DEF NewColour ColorInterpolator { key [0.0, 0.33, 0.66, 1.0 ] keyValue [1.0 0.2 0.2, 0.2 1.0 0.2, 0.2 0.2 1.0, 1.0 0.2 0.2 ] }

(Above is Grouped with the object we’re changing)

# use clock to run a ColorInterpolator, generating smoothly varying colour ROUTE Clock.fraction_changed TO NewColour.set_fraction

# use varying colour value to feed material's diffuseColor field ROUTE NewColour.value_changed TO

SphereColour.set_diffuseColor

(c) SE/FIT/HUT 2002

các ngôn ngữ kịch bản

„ Nhiều hành động quá phức tạp đối với các nút hoạt cảnh

• Tính toán đường đi (ví dụ lực hấp dẫn)

• Giải thuật về vật thể (eg fractals)

• Các môi trường cần sự công tác (ví dụ game)

„ Bạn có thể tạo ra các nút sensors, interpolators, vân vân , bằng cánh sử dụng

các chương trình kịch bản viết bằng các ngôn ngử

Java – ngôn ngử lập trình rất mạnh

JavaScript – ngôn ngử kịch bản dễ học

VRMLscript – giống JavaScript

Ngôn ngữ VRML không bắt buộc phải hỗ trợ các ngôn ngữ kịch bản

• Hầu hết các trình duyêt đều hõ trợ JavaScript và

• Nhiều trình duyêt hỗ trợ Java

„ VRMLScript = JavaScript = ECMAScript

• JavaScript không giống Java

VRMLScript là phần mềm của Cosmo Software hỗ trợ JavaScript

Các đặc tả kỹ thuật của ISO VRML gọi là ECMAScript, phiên bản có hỗ

trơ JavaScript

(c) SE/FIT/HUT 2002

nút Script

„ Nút Script chọn một chương trình

kịch bản để chạy:

„ url – chọn chương trình kịch

bản

„ DEF Bouncer Script {

url "bouncer.class" or

url "bouncer.js" or

url "javascript: " or

url "vrmlscript: " } Xem code Chạy ví dụ

„ Định nghĩa giao tiếp các chương trình kịch bản ứng dụng

„ Nút Script cũng khai báo giao

tiếp chương trình kịch bản

field, eventIn, và eventOut – là các thao

tác xuất nhập

• Mỗi cái có một tên và kiểu dữ liệu

• Các trường có một giá trị khởi đầu

„ DEF Bouncer Script { field SFFloat bounceHeight 3.0 eventIn SFFloat set_fraction eventOut SFVec3f value_changed }

Java

„ So với các ngôn ngữ như

JavaScript/VRMLscript, Java có

khả năng:

• Mô đun chương trình tốt

hơn

• Cấu trúc dữ liệu tốt hơn

• Khả năng thực hiện nhanh

hơn

• Truy cập mạng

„ Với những công việc đơn giản thì

sử dụng JavaScript/VRMLscript

„ Những chương trình phức tạp thì

dùng Java

„ Khai báo giao tiếp chương trình kịch bản

„ Với chương trình kịch bản viết bằng ngôn ngữ Java tạo ra một

file class trong trường url củanút Script

• file class được biên dịch bằng chương trình kịch bản Java

„DEF Bouncer Script { field SFFloat bounceHeight 3.0 eventIn SFFloat set_fraction eventOut SFVec3f value_changed url

"bounce2.class" }

Java class

„ Nhập các package cho lớp Java

„ File của chương trình kịch bảnphải import các package của VRML :

• Được cung cấp các công ty phân phối trình duyệt VRML

„ import vrml.*;

„ import vrml.field.*;

„ import vrml.node.*;

„ Tạo ra các file Java class

„ Các chương trình kịch bản phải định nghĩa một lớp có tính public kế thừa từ lớp Script

„ public class bounce2 extends Script { }

Phương thức tuỳ chọn initialize được gọi khi script được tải

public void initialize ( ) { }

• Quá trình khởi tạo xẩy ra khi:

Nút Script được tạo (thường khi trình duyệt nạp thế giới các vật thể)

Phương thức shutdown được gọi đến khi script thôi nạp

public void shutdown ( ) { }

• Shutdown xẩy ra :

Ngày đăng: 12/08/2014, 09:22

HÌNH ẢNH LIÊN QUAN

Bảng màu th−ờng dùng - Giáo trình đồ họa - Lesson 8 ppt
Bảng m àu th−ờng dùng (Trang 4)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w