Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
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
Nội dung
Page 1 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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 } } } (c) SE/FIT/HUT 2002 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. (c) SE/FIT/HUT 2002 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, . Page 2 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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 nhng 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 z Shape geometry appearance z Appearance material z Box z Material diffuseColor (c) SE/FIT/HUT 2002 Cơ bản về nút shape Box {size 8 12 10 # x, y, z (=w, h, d) } Xem code Chạy ví dụ Cone { bottomRadius 5 # so 10 units wide height 12 side TRUE bottom TRUE Xem code Chạy ví dụ } 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, nhng 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 height 6 bottom TRUE # cup có cạnh và đáy side TRUE top FALSE # nhng không có đỉnh } Xem code Chạy ví dụ Sphere # đơn giản nhất trong các nút shape { radius 2 # nhng cũng là phức tạp } Xem code Chạy ví dụ (c) SE/FIT/HUT 2002 Nút text Tránh tạo ra các đặc tả kỹ thuật Web-based 3D/VR. Text rt hu í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 { familySERIF # or SANS or TYPEWRITER style PLAIN # or BOLD ITALIC size 4 } } Xem code Chaỵ ví dụ (c) SE/FIT/HUT 2002 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. Page 3 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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? repeatTTRUE } } Xem code Chạy ví dụ Các Texturecó 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 { . . . } . . . ] } (c) SE/FIT/HUT 2002 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 [ . . . ] } (c) SE/FIT/HUT 2002 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ụ Page 4 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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.120.83 0.83 0.830.20 0.20 0.710.10Plastic Blue 0.200.61 0.13 0.180.27 0.00 0.000.15Metalic Red 0.200.64 0.00 0.980.10 0.03 0.220.17Metalic Purple 0.160.71 0.70 0.560.22 0.15 0.000.40Gold 0.080.75 0.33 0.000.30 0.11 0.000.26Copper 0.100.70 0.70 0.800.30 0.30 0.500.30Aluminum shininess specular Color diffuse Color ambient Intensity Mô tả (c) SE/FIT/HUT 2002 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ụ BillboardSwitchCollision InlineAnchor LODGroupTransform (c) SE/FIT/HUT 2002 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. Page 5 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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 (c) SE/FIT/HUT 2002 u điểm Đặt tên và sử dụng nút: Lu 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 (c) SE/FIT/HUT 2002 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) Page 6 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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 lu 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út PositionInterpolator có sự kiện ra : value_changed đa ra vị trí Nút TimeSensor có sự kiện ra: time đa ra thời gian Nút Transform có các sự kiện vào: set_translation set_rotation set_scale Nút Material có 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 nhng 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 (c) SE/FIT/HUT 2002 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 (c) SE/FIT/HUT 2002 đ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ể Page 7 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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ệu isActive : 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ệu time : Đa ra thời gian tuyệt đối Trờng ra dữ liệu fraction_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 (c) SE/FIT/HUT 2002 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ụ (c) SE/FIT/HUT 2002 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 Page 8 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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, . . . ] keyValue [ 0.0 1.0 0.0 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à nhng 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 (c) SE/FIT/HUT 2002 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 (c) SE/FIT/HUT 2002 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 Page 9 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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 Xem code Chạy ví dụ 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ụ (c) SE/FIT/HUT 2002 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 { . . . } . . . ] } Xem code Chạy ví dụ 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 (c) SE/FIT/HUT 2002 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 Xem code Chạy ví dụ Page 10 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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ể nhng. . . 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 were 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 } (c) SE/FIT/HUT 2002 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" } (c) SE/FIT/HUT 2002 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 : Nút Script bị xoá Trình duyệt nạp thế giới mới [...]... "bounceHeight" ); Gọi getValue để lấy giá trị của trờng lastval = obj.getValue( ); Gọi setValue đặt giá trị cho một trờng obj.setValue( newval ); Xem code java (c) SE/FIT/HUT 2002 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn Truy nhập trờng eventOuts từ Java Mỗi giao tiếp eventOut có thể đọc và ghi gọi getEventOut để đọc trờng eventOut của đối tợng obj = (SFVec3f) getEventOut( "value_changed" );...Sự kiện -event Trờng eventout từ java Đáp ứng một sự kiện Phơng thức processEvent đợc gọi mỗi khi một sự kiện nhận đợc , chuyển một đối tợng sự kiện chứa Giá trị của sự kiện Thời gian public void processEvent( . dùng 0.120 .83 0 .83 0 .83 0.20 0.20 0.710.10Plastic Blue 0.200.61 0.13 0. 180 .27 0.00 0.000.15Metalic Red 0.200.64 0.00 0. 980 .10 0.03 0.220.17Metalic Purple 0.160.71 0.70 0.560.22 0.15 0.000.40Gold 0. 080 .75. 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. Page 3 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn. sự có ích với các ứng dụng CGI. Page 5 Lờ Tn Hựng CNTT- HBK H ni Email: hunglt@it-hut.edu.vn (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