Ngôn ngữ mô hình hóa thực tại ảo VRML

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

pdf11 trang | Chia sẻ: Mr Hưng | Lượt xem: 893 | Lượt tải: 0download
Nội dung tài liệu Ngôn ngữ mô hình hóa thực tại ảo VRML, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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ờ Tấn Hựng CNTT- ĐHBK Hà nội 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ờ Tấn Hựng CNTT- ĐHBK Hà nội 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ể 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 } (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 Page 11 Lờ Tấn Hựng CNTT- ĐHBK Hà nội Email: hunglt@it-hut.edu.vn (c) SE/FIT/HUT 2002 Sự kiện -event „ Đá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( Event event ) { . . . } Xem code vrml Xem code java „ Truy nhập các tr−ờng từ Java „ Mỗi tr−ờng giao tiếp có thể đ−ợc đọc và viết • Gọi getField để đọc tr−ờng của đối t−ợng „ obj = (SFFloat) getField( "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 ); (c) SE/FIT/HUT 2002 Tr−ờng eventout từ java „ 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" ); • Gọi getValue đọc giá trị cuối cùng đ−ợc gửi „ lastval = obj.getValue( ); • Gọi setValue để gửi một sự kiện „ obj.setValue( newval ); „ Ví dụ Java script „ Tạo nút interpolator vớiquả bóng nẩy rồi tính trọng lực nh− chuyển động nẩy ngang từ dữ liệu đầu vào là thời gian phân đoạn „ Nút cần: DEF Ball Transform { . . . } DEF Clock TimeSensor { . . . } DEF Bouncer Script { . . . }

Các file đính kèm theo tài liệu này:

  • pdfl8_2694.pdf
Tài liệu liên quan