Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng

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

 

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 1

Trang 1

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 2

Trang 2

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 3

Trang 3

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 4

Trang 4

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 5

Trang 5

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 6

Trang 6

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 7

Trang 7

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 8

Trang 8

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 9

Trang 9

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 11 trang xuanhieu 4780
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng

Bài giảng Đồ họa hiện thực ảo - Bài 8: Ngôn ngữ mô hình hóa thực tại ảo VRML - Lê Tấn Hưng
ộ
 „ Tr−ờng ra dữ liệu isActive : „ Để kích hoạt vị trí của một vật thể „ Interpolating positions
 VRML cung cấp: „ Mỗi khoá vị trí cùng với đ−ờng 
 „ Ra dữ liệu là TRUE khi bộ thời gian bắt 
 • Một danh sách khoá về vị dẫn có: 
 đầu
 trí key positions cho đ−ờng „ Một khoá giá trị key value
 „ Ra dữ liệu là FALSE khi bộ thời gian di chuyển (nh− là một vị trí) 
 kết thúc
 • Thời gian bắt đầu ở mỗi vị „ Một khoá thời gian phân đoạn 
 trí 
 „ Tr−ờng ra dữ liệu time : „ Phép nội suy sẽ điền vàu các giá
 „ Nút interpolator có thể chuyển đổi trị vàu giữa các giá trị khoá: 
 „ Đ−a ra thời gian tuyệt đối một đầu vàu thời gian thành một 
 „ Fractional TimePosition
 „ Tr−ờng ra dữ liệu fraction_changed : đầu ra toạ độ
 „ 0
 „ • Khi thời gian ở giữa hai 
 Đ−a ra các giá trị từ 0.0 tới 1.0 trong „ 0.1
 suốt một chu ký khoá vị trí, nút interpolator 
 sẽ tính toán vị trí trung gian „ ..
 „
 Đặt lại giá trị 0.0 lúc bắt đầu mỗi chu „ 1
 kỳ
 Xem code Chạy ví dụ
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
 Nút positioninterpolator Sử dụng các nút interpolator khác
 „ Nút PositionInterpolator miêu „ Sự kiện đầu vào set_fraction : „ Kích hoạt vị trí PositionInterpolator
 tả vị trí của đ−ờng dẫn • Đặt thời gian phân đoạn „ Kích hoạt h−ớng OrientationInterpolator
 • key – khoá thời gian phân hiện thời theo khoá đ−ờng „ Kích hoạt co giãn Position Interpolator
 đoạn dẫn 
 „ Kích hoạt màu sắc ColorInterpolator
 • keyValue –khoávị trí „ Sự kiện đầu ra value_changed : 
 „ Kích hoạt tính trong suốt ScalarInterpolator
 „ PositionInterpolator { key [ 0.0, • Đ−a ra vị trí theo đ−ờng 
 . . . ] keyValue [ 0.0 0.0 0.0, . . . ] dẫn mỗi khi fraction đ−ợc 
 } đặt 
 „ Th−ờng để gửi vào sự kiện đầu Xem code Chạy ví dụ
 vào set_translation của nút 
 Transform
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
Lờ Tấn Hựng CNTT- ĐHBK Hà nội
Email: hunglt@it-hut.edu.vn 
 Page 7
 Colorinterpolator-scalarinterpotator
 „ OrientationInterpolator „ PositionInterpolator „ ColorInterpolator „ ScalarInterpolator
 „ Nút OrientationInterpolator mô „ Nút PositionInterpolator mô tả „ Nút ColorInterpolator mô tả đ−ờng „ Nút ScalarInterpolator mô tả
 tả đ−ờng dẫn h−ớng đ−ờng dẫn vị trí hay tỷ lệ dẫn màu sắc đ−ờng dẫn vô h−ớng
 • key – khoá thời gian phân • key –khoáthời • key – khoá thời gian phân • key – khoá thời gian phân 
 đoạn gian phân đuạn
 đoạn đoạn
 • keyValue – khoá về xoay • keyValue –khoá
 (gồm cạnh và góc) vị trí (hoặc tỷ lệ) • keyValue –khoámàu • keyValue –khoávô
 „ OrientationInterpolator { key [ • PositionInterpolator { (đỏ,xanh d−ơng,xanh da trời) h−ớng (dùng cho bất cứ
 0.0, . . . ] keyValue [ 0.0 1.0 0.0 key [ 0.0, . . . ] keyValue [ „ ColorInterpolator { key [ 0.0, . . . ] vật thể nào)
 0.0, . . . ] } 0.0 0.0 0.0, . . . ] } keyValue [ 1.0 1.0 0.0, . . . ] } „ ScalarInterpolator { key [ 0.0, . . 
 „ Th−ờng gửi giá trị về góc xoay • Th−ờng gửi giá trị vị trí vào „ Th−ờng gửi vàu sự kiện đầu vào . ] keyValue [ 4.5, . . . ] }
 vào sự kiện set_rotation của nút sự kiện set_scale của nút set_diffuseColor hay „ Th−ờng gửi vào sự kiện 
 Transform Transform set_emissiveColor của nút set_transparency của nút 
 Material Material
 „ Xem code Chạy ví dụ „ Xem code Chạy ví dụ
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
 nút Sensor nút Sensor
 „ Có 7 kiểu nút sensor . „ Nút ProximitySensor phát hiện ra vị trí quan sát gần nhất
 „ Nút sensor dò các hành động của ng−ời dùng và phát ra một „ Nút TouchSensor phát hiện sự kiện kích chuột
 sự kiên. „ Nút TimeSensor là bộ đếm thời gian
 „ 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 „ Tất cả các nút CylinderSensor, PlaneSensor and 
 chu kỳ đơn gồm có nguyên nhân_kết quả. SphereSensor phát hiện trạng thái kéo các vật thể.
 „ Bốn bài cuối cùng trong phần “VRML Resources | Example „ Nút VisibilitySensor nhận biết một đối t−ợng là hữu hình đối 
 VRML Worlds” của Website là nh−ng ví dụ hay về các nút với ng−ời dùng
 sensor và liên kết với các sự kiện.
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
 nút Sensor viewer Dùng visibilitysensor và proximitysensor
 „ Motivation „ Hai nút VisibilitySensor và ProximitySensor cảm biến vùng vật thể
 „ Cảm ứng vị trí ng−ời dùng cho phép kích hoạt các hoạt cảnh dạng hộp 
 • Khi một vùng hữu hình đối với ng−ời dùng • center – tâm vùng 
 • Khi ng−ời dùng ở trong một vùng nào đó 
 • size –kích th−ớc vùng
 • 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ả hai nút có đầu ra giống nhau :
 đ−ợc xây dựng săn • Sự kiện enterTime – gửi thời gian vào vùng vào hay lúc hữu hình 
 „ Có 3 kiểu nút viewer sensor: • Sự kiện exitTime – gửi thời gian vào vùng ra hay lúc không hữu 
 • Nút VisibilitySensor cảm biến nếu ng−ời dùng có thể thấy một hình
 vùng nào đó a region 
 • Nút ProximitySensor cảm biến khi ng−ời dùng đến phạm vi xung • Sự kiện isActive – gửi true ở vùng vào, false ở vùng ra 
 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 (c) SE/FIT/HUT 2002
Lờ Tấn Hựng CNTT- ĐHBK Hà nội
Email: hunglt@it-hut.edu.vn 
 Page 8
 Nút VisibilitySensor nút ProximitySensor
 „ Nút VisibilitySensor cảm biến nếu ng−ời dùng nhìn thấy hoặc ngừng „ Nút ProximitySensor cảm biến khi ng−ời dùng vào/ rời khỏi một vùng nào đó
 quan sát 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
 • center và size –tâm và kích th−ớc của vùng • isActive – gửi giá trị true/false nếu vào vùng vào/ vùng ra 
 • enterTime và exitTime – gửi thời gian vào\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 
 • isActive –gửi giá trị true/false vào vùng vào\vùng ra 
 „ ProximitySensor
 „ DEF VisSense VisibilitySensor { center 0.0 0.0 0.0 size 14.0 14.0 14.0 • Nút ProximitySensor cảm biến khi ng−ời dùng đang ở trong 
 } ROUTE VisSense.enterTime TO Clock.set_startTime 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 (c) SE/FIT/HUT 2002
 nút Collision
 Các nút sensor hành động
 „ Nút Collision cảm biến đ−ợc khi tầm „ Tối −u hoá việc phát hiện xung đột
 „ Có 4 nút sensor hành động „ Cảm biến các vật thể
 quan sát của ng−ời dùng v−ớng các vật „ Sự kiện collision luôn đ−ợc kích hoạt 
 thể theo ngầm định chính: „ Tất cả các cảm biến hành 
 „ collide – cho phép/không cho „ Tắt nó bất cứ khi nàu có thể! động cảm biến đ−ợc tất cả
 phép cảm biến „ Tuy nhiên, một khi nút collision cha • TouchSensor cảm biến khi 
 tắt thì nút child không thể bật nó trở các vật thể cùng nhóm
 „ proxy – vật thể đơn giản đ−ợc lại! chạm vào vật thể
 cảm biến thay cho các nút con 
 „ Kết quả phát hiện xung đột là từ ng−ời • SphereSensor khi kéo chuột „ Cảm biến đ−ợc kích hoạt khi 
 „ children – các nút con đ−ợc cảm dùng va chạm với một vật thể chứ khi con trỏ của ng−ời dùng 
 biến không phải là vật thể va chạm với • CylinderSensor khi kéo 
 ng−ời dùng chạm phải vật thể đ−ợc cảm 
 „ collideTime – gửi thời gian khi „ Sử dụng nhiều nút sensor chuột
 ng−ời dùng chạm vào vật thể biến
 „ Một số nút sensor có thể cảm biến • PlaneSensor khi kéo chuột
 „ DEF Collide Collision { collide TRUE cùng một lúc 
 proxy Shape { geometry Box { . . . } } „ Bạn có thể tạo ra nhiều „ Nút Anchor là nút cảm biến 
 children [ . . . ] } ROUTE nútvisibility, proximity, and Xem code Chạy ví dụ
 Collide.collideTime TO collision sensor hành động có mục đích đặc biệt 
 OuchSound.set_startTime „ Các vùng cảm biến có thể chông mà các đáp ứng đ−ợc xây dựng 
 lên nhau 
 „ Xem code Chạy ví dụ sẵn
 „ 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) SE/FIT/HUT 2002
Touchsensor và spheresensor 
 Cylindersensor-planesensor
 „ Nút TouchSensor cảm biến sự va „ Nút SphereSensor cảm biến sự „ Nút CylinderSensor nhận biết „ Nút PlaneSensor nhận biết con trỏ
 chạm của con trỏ con trỏ đ−ợc rê và làm cho vật đ−ợc rê và làm dịch chuyển vật thể
 dich chuyển con trỏ tạo ra sự trên một mặt phẳng
 • isOver – gửi giá trị true/false xoayquanh hình cầu thể xoay quanh hình trụ
 • isActive – gửi giá trị • isActive – gửi các giá trị 
 khi con trỏ đang ở trong hay • isActive –gửi các giá trị true/false khi chuột đ−ợc 
 ở ngoài vùng vật thể true/false khi chuột đ−ợc nhấn hay thả
 true/false khi con chuột nhấn hay thả
 • isActive – gửi giá trị đ−ợc nhấn hay thả • translation_changed –làm 
 true/false khi chuột đ−ợc • rotation_changed –làm cho vật thể dịch chuyển khi 
 nhấn hay thả • rotation_changed -đ−a cho vật thể quay khi kéo rê chuột 
 • touchTime –đ−a ra thời gian ra sự quay khi rê con „ Transform { children [ DEF „ Transform { children [ DEF 
 khi chuột đ−ợc thả chuột Rotator CylinderSensor { } Mover PlaneSensor { } DEF
 MoveMe Transform { . . . } ] } 
 „ Transform { children [ DEF „ Transform { children [ DEF DEF RotateMe Transform { . 
 . . } ] } ROUTE ROUTE 
 Touched TouchSensor { } Rotator SphereSensor { } Mover.translation_changed TO
 Shape { . . . } . . . ] } DEF RotateMe Transform { . Rotator.rotation_changed MoveMe.set_translation
 TO RotateMe.set_rotation
 Xem code Chạy ví dụ . . } ] } ROUTE 
 „ Xem code Chạy ví dụ
 Rotator.rotation_changed „ Xem code Chạy ví dụ
 TO RotateMe.set_rotation
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
 Lờ Tấn Hựng CNTT- ĐHBK Hà nội
 Email: hunglt@it-hut.edu.vn 
 Page 9
 Sử dụng nhiều nút sensor
 ví dụ sử dụng các nút sensor
 Nhiều nút sensor có thể cảm biến cùng một vật thể nh−ng. . . #Clock to drive animations
 • Nếu các nút sensor ở trong cùng một nhóm : DEF Clock TimeSensor { cycleInterval 10.0 loop TRUE }
 • Tất cả đều có thể đáp ứng các sự kiện # Colour changes for sphere (red -> green -> blue -> red)
 • Nếu các nút sensors có độ sâu khác nhau trong cấu trúc cây của DEF NewColour ColorInterpolator { key [0.0, 0.33, 0.66, 1.0 ]
 nút : 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 ] }
 • Nút sensor sâu nhất sẽ đáp ứng . . . (Above is Grouped with the object we’re changing)
 • Các nút khác không đáp ứng
 # 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) SE/FIT/HUT 2002
 nút Script
 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 „ Nút Script chọn một ch−ơng trình „ Định nghĩa giao tiếp các 
 • Tính toán đ−ờng đi (ví dụ lực hấp dẫn) kịch bản để chạy: ch−ơng trình kịch bản ứng 
 • Giải thuật về vật thể (eg. fractals) „ url –chọn ch−ơng trình kịch dụng
 • Các môi tr−ờng cần sự công tác (ví dụ game) bản „ Nút Script cũng khai báo giao 
 „ Bạn có thể tạo ra các nút sensors, interpolators, vân vân , bằng cánh sử dụng „ DEF Bouncer Script { tiếp ch−ơng trình kịch bản
 các ch−ơng trình kịch bản viết bằng các ngôn ngử url "bouncer.class" or... • field, eventIn, và
 • Java – ngôn ngử lập trình rất mạnh url "bouncer.js" or... eventOut –làcác thao 
 • JavaScript – ngôn ngử kịch bản dễ học tác xuất nhập
 • VRMLscript – giống JavaScript url "javascript: ..." or... • Mỗi cái có một tên và kiểu 
 Ngôn ngữ VRML không bắt buộc phải hỗ trợ các ngôn ngữ kịch bản url "vrmlscript: ..." } dữ liệu 
 • Hầu hết các trình duyêt đều hõ trợ JavaScript và • Các tr−ờng có một giá trị 
 • Nhiều trình duyêt hỗ trợ Java Xem code Chạy ví dụ khởi đầu 
 „ VRMLScript = JavaScript = ECMAScript „ DEF Bouncer Script { field
 • JavaScript không giống Java SFFloat bounceHeight 3.0
 • VRMLScript là phần mềm của Cosmo Software hỗ trợ JavaScript eventIn SFFloat set_fraction
 • Các đặc tả kỹ thuật của ISO VRML gọi là ECMAScript, phiên bản có hỗ eventOut SFVec3f 
 trơ JavaScript value_changed }
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
 Java Java class
 „ So với các ngôn ngữ nh− „ Khai báo giao tiếp ch−ơng „ Nhập các package cho lớp Java
 JavaScript/VRMLscript, Java có trình kịch bản „ File của ch−ơng trình kịch bảnphải import các package của VRML : 
 khả năng: • Đ−ợc cung cấp các công ty phân phối trình duyệt VRML
 „ Với ch−ơng trình kịch bản viết „ import vrml.*; 
 • Mô đun ch−ơng trình tốt bằng ngôn ngữ Java tạo ra một „ import vrml.field.*; 
 hơn file class trong tr−ờng url củanút „ import vrml.node.*;
 • Cấu trúc dữ liệu tốt hơn Script „ 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 
 • Khả năng thực hiện nhanh • file class đ−ợc biên dịch Script 
 hơn bằng ch−ơng trình kịch „ public class bounce2 extends Script { . . . }
 • Truy cập mạng bản Java • Ph−ơng thức tuỳ chọn initialize đ−ợc gọi khi script đ−ợc tải 
 „ DEF Bouncer Script { field • public void initialize ( ) { . . . }
 „ Với những công việc đơn giản thì
 SFFloat bounceHeight 3.0 • Quá trình khởi tạo xẩy ra khi: 
 sử dụng JavaScript/VRMLscript • Nút Script đ−ợc tạo (th−ờng khi trình duyệt nạp thế giới các vật thể) 
 eventIn SFFloat • Ph−ơng thức shutdown đ−ợc gọi đến khi script thôi nạp
 „ Những ch−ơng trình phức tạp thì set_fraction eventOut
 dùng Java • public void shutdown ( ) { . . . }
 SFVec3f value_changed url • Shutdown xẩy ra : 
 "bounce2.class" } • Nút Script bị xoá
 • Trình duyệt nạp thế giới mới 
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
Lờ Tấn Hựng CNTT- ĐHBK Hà nội
Email: hunglt@it-hut.edu.vn 
 Page 10
 Sự kiện -event Tr−ờng eventout từ java
 „ Đáp ứng một sự kiện „ Truy nhập các tr−ờng từ Java „ Truy nhập tr−ờng eventOuts từ „ Ví dụ Java script 
 • Ph−ơng thức „ Mỗi tr−ờng giao tiếp có thể đ−ợc Java „ Tạo nút interpolator vớiquả bóng 
 processEvent đ−ợc gọi đọc và viết „ Mỗi giao tiếp eventOut có thể đọc nẩy rồi tính trọng lực nh− chuyển 
 mỗi khi một sự kiện nhận • Gọi getField để đọc và ghi động nẩy ngang từ dữ liệu đầu 
 đ−ợc , chuyển một đối tr−ờng của đối t−ợng • gọi getEventOut để đọc vào là thời gian phân đoạn
 t−ợng sự kiện chứa 
 „ obj = (SFFloat) getField( tr−ờng eventOut của đối „ Nút cần: DEF Ball Transform { . 
 • Giá trị của sự kiện "bounceHeight" ); t−ợng . . } DEF Clock TimeSensor { . . 
 • Thời gian • Gọi getValue để lấy giá trị „ obj = (SFVec3f) . } DEF Bouncer Script { . . . }
 „ public void processEvent( của tr−ờng getEventOut( 
 "value_changed" );
 Event event ) { . . . } „ lastval = obj.getValue( );
 • Gọi setValue đặt giá trị • Gọi getValue đọc giá trị 
 Xem code vrml cho một tr−ờng cuối cùng đ−ợc gửi
 „ lastval = obj.getValue( );
 „ obj.setValue( newval );
 • Gọi setValue để gửi một 
 Xem code java sự kiện
 „ obj.setValue( newval );
 (c) SE/FIT/HUT 2002 (c) SE/FIT/HUT 2002
Lờ Tấn Hựng CNTT- ĐHBK Hà nội
Email: hunglt@it-hut.edu.vn 
 Page 11

File đính kèm:

  • pdfbai_giang_do_hoa_hien_thuc_ao_bai_8_ngon_ngu_mo_hinh_hoa_thu.pdf