Các node cần sử dụng cho hoạt hoá

Một phần của tài liệu Áp dụng các mô hình 3D vào trong tạo lập web (Trang 49 - 54)

S d ng mô hình 3D ửụ

3.3.3 Các node cần sử dụng cho hoạt hoá

Việc sử dụng sự trợ giúp sẵn có, chỉ có thể dừng lại ở mức cho người xem được tương tác với mô hình mà không thể hoạt hoá được mô hình. Để có thể hoạt hoá được mô hình, bắt buộc người lập trình viết lại code của file VRML. Trong đó, phải thêm vào một số node hỗ trợ cho hoạt hoá.

Dưới đây, em sẽ giới thiệu một cách khái quát nhất các node hay sử dụng để phục vụ cho hoạt hoá

NavigationInfo:Là một node gốc hỗ trợ để user có thể xem xét khung cảnh với sự tiếp cận gần với thực tế hơn.

Cú pháp:

NavigationInfo {

eventIn SFBool set_bind

exposedField MFFloat avatarSize [0.25, 1.6, 0.75] exposedField SFBool headlight TRUE

exposedField SFFloat speed 1.0 exposedField MFString type "WALK" exposedField SFFloat visibilityLimit 0.0 eventOut SFBool isBound

}

Trong đó, đáng chú ý là trường type. Có các loại:

• WALK: user có thể xem xét quanh khung cảnh và chịu tác động của trọng lực.

• FLY: user có thể xem xét quanh khung cảnh và không chịu tác động của trọng lực

• EXAMINE: user đứng im nhưng có thể xoay hình theo các góc nhìn khác nhau. Kiểu này hay sử dụng trong các mô hình ôtô, xe đạp v..v

• NONE: hoàn toàn đứng im. Hay dùng trong phim, quảng cáo và sử dụng cho logo.

Có thể khai báo trường type theo 1 trong 4 kiểu trên hoặc là khai báo như sau: type [ "EXAMINE","ANY" ] . Với khai báo kiểu này, NavigationInfo cho phép người dùng làm nhiều thao tác tương đương với cả WALK, FLY, EXAMINE trong đó EXAMINE là ngầm định.

Timesensor: node này đơn giản là một chiếc đồng hồ hẹn giờ.

TimeSensor {

exposedField SFTime cycleInterval 1

-> chu kì

exposedField SFBool enabled TRUE exposedField SFBool loop FALSE/ TRUE

-> chạy 1 lần/ chạy liên tục

exposedField SFTime startTime 0 exposedField SFTime stopTime 0 eventOut SFTime cycleTime eventOut SFFloat fraction_changed eventOut SFBool isActive

eventOut SFTime time }

Node này không hiển thị trên màn hình. TimeSensor là một node quan trọng trong hoạt hoá. Nó thường được dùng để sinh các sự kiện theo chu kì, các sự kiện on-off v..v

TouchSensor: Là node điều khiển việc dùng chuột để tương tác với các hình trong khung cảnh.

TouchSensor {

exposedField SFBool enabled TRUE eventOut SFVec3f hitNormal_changed eventOut SFVec3f hitPoint_changed eventOut SFVec2f hitTexCoord_changed eventOut SFBool isActive

eventOut SFBool isOver eventOut SFTime touchTime }

Ví dụ:

#VRML V2.0 utf8 Group {

children [ ...

DEF Clicker TouchSensor {} ...

DEF TimeSource TimeSensor {} ...

] }

ROUTE Clicker.touchTime TO TimeSource.startTime ->Click chuột thì đồng hồ sẽ đếm

Khi chuột được rê trên , sự kiện isOver sẽ thiết lập giá trị TRUE và thiết lập giá trị FALSE khi không rê trên đó. Nếu giá trị isOver là TRUE, khi click chuột vào hình thì giá trị IsActive sẽ được thiết lập là TRUE và nếu nhả chuột ra thì giá trị IsActive là FALSE. Thường thì giá trị touchTime sẽ được gửi đến TimeSensor để bộ đếm thời gian hoat động.

OrientationInterpolator: Các Interpolator là các node rất quan trọng trong hoạt hoá. Các node này dùng để thay đổi giá trị của một tập thuộc tính nào đó của đối tượng theo thời gian.

Có sáu loại Interpolator: ColorInterpolator, CoordinateInterpolator,

NormalInterpolator, OrientationInterpolator, PositionInterpolator, ScalarInterpolator. Các Interpolator làm việc với các thuộc tính khác nhau nhưng chúng đều giống nhau về cách hoạt động. Vì thế, em sẽ chỉ giới thiệu một node quan trọng đại diện mà em đã sử dụng trong sản phẩm. Đó là OrientationInterpolator.

Cú pháp:

OrientationInterpolator{

eventIn SFFloat set_fraction eventOut SFRotation value_changed exposedField MFFloatkey [ ]

exposedField MFRotation keyValue [ ] }

Sử dụng: Để hoạt hoá các đối tượng quay tuỳ theo giá trị của keyValue. Đây là một Interpolator hay sử dụng nhất để hoạt hoá mô hình.

Ví dụ: Quay mô hình theo trục Oy

DEF Animation OrientationInterpolator {

0 , 0.25 , 0.5 , 1 ] keyValue [ 0 1 0 0 , 0 1 0 2.1, 0 1 0 4.2, 0 1 0 0 ] }

Billboard: Đây là một node làm việc với vị trí của các hình khối trong khung cảnh. Nó tự động quay khung cảnh quanh người xem. Tưởng tượng giống như có một cái bàn tròn, các mô hình được đặt trên cái bàn đó, ta đứng im ở giữa chiếc bàn còn Billboard sẽ làm nhiệm vụ xoay chiếc bàn để toàn bộ khung cảnh sẽ lần lượt hiện ra.

Cú pháp:

Billboard {

eventIn MFNode addChildren eventIn MFNode removeChildren

exposedField SFVec3f axisOfRotation 0 1 0 exposedField MFNode children []

-> add các hình khối vào Billboard

field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 }

Billboard được sử dụng để chạy các chữ hoặc kết hợp với mô hình trục quay Oxyz để khi quay trục quay thì các mô hình khác trong khung cảnh cũng quay theo.

Collision: Node này làm việc với các va chạm trong khung cảnh hoặc là như một sensor va chạm trong hoạt hoá.

Collision {

eventIn MFNode addChildren eventIn MFNode removeChildren exposedField MFNode children []

exposedField SFBool collide TRUE/FALSE

-> kích hoạt/không kích hoạt kiểm tra va chạm

field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1

field SFNode proxy NULL eventOut SFTime collideTime

}

Trong hoạt hoá, node này kiểm tra sự “va chạm” giữa user và các node con của Collision. Nếu giá trị collide là TRUE thì kiểm tra va chạm sẽ được thực hiện và đối tượng sẽ hiện lên trên khung nhìn. Còn nếu giá trị của collide là FALSE thì user có thể đi xuyên qua. Một trường quan trọng khác là collideTime, trường này được sử dụng để kích hoạt một sự kiện khi mà user “va chạm”với một hình khối nào đó trong khung cảnh.

Script: Là node cho phép người dùng có thể tự định nghĩa các trường riêng, các sự kiện vào/ra riêng.

Cú pháp :

Script {

exposedField MFString url [] field SFBool directOutput FALSE field SFBool mustEvaluate FALSE // Có thể có thêm các trường như: eventIn Type eventInName

field Type fieldName default value eventOut Type eventOutName }

Nói chung, node Script đều có ba trường hay sử dụng nhất là:

Script {

eventIn SFBool input

field SFBool boolValue TRUE eventOut SFBool output url "..." }

• url tham chiếu đến một file *.class của Java

• url tham chiếu đến một file *.js của Javascript

• url trực tiếp thực hiện các câu lệnh Javascript: url "javascript:

function input(value, time) {

if (value==boolValue) output = value; } "

Với các chương trình nhỏ thì nên sử dụng url với các câu lệnh hoặc một file JavaScript vì nó đơn giản, nhưng nó lại thiếu sức mạnh và độ linh hoạt như Java.

Sử dụng với Java nhiều hơn khi cần viết các kịch bản lớn, khối lượng tính toán lớn hoặc phải tương tác nhiều với phần cứng. Hơn nữa, Java sẽ được biên dịch ra bytecode nên người dùng sẽ không thể nhìn thấy được kịch bản sẽ diễn ra như thế nào. Do đó tính bảo mật sẽ cao hơn.

Với chương trình mà đề tài này xây dựng, các Script sẽ sử dụng JavaScript. Kịch bản được sử dụng để làm việc với hệ trục toạ độ và thanh kéo được tạo ra để khi sử dụng chuột quay hệ toạ độ, kéo sang trái hoặc sang phải thanh kéo thì hình cũng sẽ được xoay, được zoom tương ứng.

Trên đây là một vài node quan trọng sử dụng để hoạt hoá. Công đoạn tiếp theo của xây dựng và hoạt hoá mô hình là đẩy các mô hình lên trang Web

Một phần của tài liệu Áp dụng các mô hình 3D vào trong tạo lập web (Trang 49 - 54)

w