Tải bản đầy đủ (.pdf) (12 trang)

Chương 4-9 Tạo chuyển động và tương tác trong VRML-Nội suy

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (247.32 KB, 12 trang )

Chương 4: Tạo chuyển động và tương tác trong VRML
4.3. Các nút nội suy
4.3.1. OrientationInterpolator
OrientationInterpolator {
eventIn

SFFloat

# (- ∞, ∞)

set_fraction

exposedField MFFloat

key

[] # (- ∞, ∞)

exposedField MFRotation keyValue
eventOut

[] # [-1,1],(- ∞, ∞)

SFRotation value_changed

}
Nội suy trong tập các giá trị quay chỉ ra trong trường keyValue. Phép quay tuyệt đối trong
không gian đối tượng khơng được tích lũy.
Sự định hướng chỉ ra vị trí cuối của đối tượng sau khi phép quay đã được áp dụng.
OrientationInterpolator nội suy giữa hai định hướng bằng cách tính tốn đường đi ngắn
nhất trên mặt cầu đơn vi giữa hai định hướng. Nội suy là tuyến tính trong chiều dài cung dọc


theo đường này.
Thuộc tính
key: Tập giá trị đầu vào.
keyValue
 Tập giá trị đầu ra
 Trường keyValue phải chứa số các phép quay bằng số keyframe trong trường
key.
Sự kiện
set_fraction: Giá trị đầu vào.
value_changed: Giá trị đầu ra.
Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ
#VRML V2.0 utf8
Group {
children [
DEF OI OrientationInterpolator {


key [ 0.0, 0.1, 0.3, 0.6, 0.8, 1.0 ]
keyValue [ 0 0 1 0, 0 0 1 1.2, 0 0 1 -1.57, 0 0 1 1.5,
0 0 1 3.15, 0 0 1 6.28 ]
}
DEF T Transform {
children Shape {
geometry Cone {}
appearance Appearance { material Material { diffuseColor 1 0 0 } }
}
}
DEF TOS TouchSensor {} # Click to start the orientation interp
DEF TS TimeSensor { # Drives the interpolator

cycleInterval 3.0 # 3 second interp loop
}
Background { skyColor 1 1 1 }
]
}
ROUTE OI.value_changed TO T.rotation
ROUTE TOS.touchTime TO TS.startTime
ROUTE TS.fraction_changed TO OI.set_fraction
4.3.2. PositionInterpolator
Cú pháp
PositionInterpolator {
eventIn

# (- ∞, ∞)

SFFloat set_fraction

exposedField MFFloat key

[]

exposedField MFVec3f keyValue
eventOut
}

SFVec3f value_changed

# (- ∞, ∞)
[]


# (- ∞, ∞)


Nội suy tuyến tính trong danh sách vectơ 3D
Thuộc tính
key: Tập giá trị đầu vào.
keyValue: Tập giá trị đầu ra
Trường keyValue phải chứa số giá trị bằng với số giá trị trong trường key.
Sự kiện
set_fraction: Giá trị đầu vào.
value_changed: Giá trị đầu ra.
Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ
#VRML V2.0 utf8
Group {
children [
DEF PI PositionInterpolator {
key [

0.0,

.1, .4

.7,

.9, 1.0 ]

keyValue [ -3 0 0, 0 0 0, 0 20 -50, 0 0 -100, 0 0 0, -3 0 0 ]
}
DEF T Transform {

translation -3 0 0
children Shape {
geometry Cone {}
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
}
}
DEF TOS TouchSensor {} # Click to start the position interp
DEF TS TimeSensor { cycleInterval 3.0 } # 3 sec loop


Background { skyColor 1 1 1 }
NavigationInfo { type "EXAMINE" }
]
}
ROUTE PI.value_changed TO T.translation
ROUTE TOS.touchTime TO TS.startTime
ROUTE TS.fraction_changed TO PI.set_fraction
4.3.3. ColorInterpolator
Cú pháp
ColorInterpolator {
eventIn

# (- ∞, ∞)

SFFloat set_fraction

exposedField MFFloat key


[]

exposedField MFColor keyValue
eventOut

# (- ∞, ∞)
[]

# [0,1]

SFColor value_changed

}
Nút này nội suy trong tập các giá trị của MFColor để sinh ra sự kiện value_changed SFColor
(RGB).
Thuộc tính
key
 Tập giá trị đầu vào.
 Được định nghĩa trong không gian màu RGB
keyValue
 Tập giá trị đầu ra
 Số lượng màu trong trường keyValue phải bằng số keyframe trong trường key
Sự kiện
set_fraction
 Giá trị đầu vào.
 Thực hiện trong không gian HSV( Hue - Saturation - Value )


value_changed
 Giá trị đầu ra.

 Được định nghĩa trong không gian màu RGB
Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ
#VRML V2.0 utf8
Transform { children [
Transform {
translation -4 0 0
children Shape {
geometry Box { }
appearance DEF A Appearance { material DEF M Material { diffuseColor .8 .2 .2 } }
}
}
Transform {
translation 0 0 0
children Shape {
geometry Sphere { }
appearance USE A
}
}
Transform {
translation 4 0 0
children Shape {
geometry Cone { }
appearance USE A
}
}


NavigationInfo { type "EXAMINE" }
]}

DEF CI ColorInterpolator {
key [ 0 .2 .4 .6 .8 1 ]
keyValue [ .8 .2 .2 .2 .8 .2 .2 .2 .8 .8 .8 .8 1 0 1 .8 .2 .2 ]

#6

}
DEF TS TimeSensor {
loop TRUE
cycleInterval 5
startTime 1
}
ROUTE TS.fraction_changed TO CI.set_fraction
ROUTE CI.value_changed TO M.set_diffuseColor
4.3.4. CoordinateInterpolator
Cú pháp
CoordinateInterpolator {
eventIn

# (- ∞, ∞)

SFFloat set_fraction

exposedField MFFloat key
exposedField MFVec3f keyValue
eventOut

# (- ∞, ∞)

[]


[]

# (- ∞, ∞)

MFVec3f value_changed

}
Nội suy tuyến tính tập giá trị của MFVec3f.
Thuộc tính
key: Tập giá trị đầu vào.
keyValue
 Tập giá trị đầu ra
 Số tọa độ trong trường keyValue phải là bội số của số keyframe trong trường key.
Bội số nguyên đó định nghĩa số tọa độ sẽ chứa trong sự kiện value_change.
Sự kiện


set_fraction: Giá trị đầu vào.
value_changed: Giá trị đầu ra.
Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ
#VRML V2.0 utf8
Group {
children [
DEF CI CoordinateInterpolator {
key [ 0.0, 1.0 ]
keyValue [ 1 0 -1, -1 0 -1, 0 0 1, 0 0.5 0,
1 0 -1, -1 0 -1, 0 0 1, 0 3.0 0 ]
}

Shape {
geometry IndexedFaceSet {
coord DEF C Coordinate { point [ 1 0 -1, -1 0 -1, 0 0 1, 0 0.5 0 ] }
coordIndex [ 0 1 3 -1 1 2 3 -1 2 0 3 ]
}
appearance Appearance { material Material {} }
DEF T TouchSensor {} # Click to start the morph
DEF TS TimeSensor { # Drives the interpolator
cycleInterval 3.0 # 3 second morph
loop TRUE
}
Background { skyColor 1 1 1 }
]
}
ROUTE CI.value_changed TO C.point
ROUTE T.touchTime TO TS.startTime


ROUTE TS.fraction_changed TO CI.set_fraction
4.3.5. ScalarInterpolator
Cú pháp
ScalarInterpolator {
eventIn

# (- ∞, ∞)

SFFloat set_fraction

exposedField MFFloat key
exposedField MFFloat keyValue

eventOut

# (- ∞, ∞)

[]
[]

# (- ∞, ∞)

SFFloat value_changed

}
Nội suy tuyến tính trong tập giá trị SFFload. Nội suy này thích hợp cho bất kỳ tham số nào
được xác định bằng cách dùng giá trị điểm thực. Ví dụ như các trường width, radius, và
intensity.
Thuộc tính
key: Tập giá trị đầu vào.
keyValue
 Tập giá trị đầu ra
 Trường keyValue phải chứa số giá trị bằng với số giá trị chứa trong trường key.
Sự kiện
set_fraction: Giá trị đầu vào.
value_changed
 Giá trị đầu ra.
 Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ:
#VRML V2.0 utf8
Group {
children [
DEF SI ScalarInterpolator {

key [ 0.0, .5, 1.0 ]
keyValue [ 0, .9, 0 ]


}
DEF T Transform {
translation -3 0 0
children Shape {
geometry Cone {}
appearance Appearance {
material DEF M Material { diffuseColor 1 0 0 }
}
}
}
DEF TOS TouchSensor {} # Click to start the interp
DEF TS TimeSensor { loop TRUE cycleInterval 3.0 } # 3 sec loop
Background { skyColor 1 1 1 }
NavigationInfo { type "EXAMINE" }
]
}
ROUTE SI.value_changed TO M.transparency
ROUTE TOS.touchTime TO TS.startTime
ROUTE TS.fraction_changed TO SI.set_fraction
4.3.6. NormalInterpolator
Cú pháp
NormalInterpolator {
eventIn

SFFloat set_fraction


exposedField MFFloat key
exposedField MFVec3f keyValue
eventOut

# (- ∞, ∞)
[] # (- ∞, ∞)
[] # (- ∞, ∞)

MFVec3f value_changed

}
Nội suy trong danh sách vectơ normal thiết lập theo quy định của trường keyValue. Vectơ
đầu ra value_changed phải là tập các vectơ normal


NormalInterpolator phải được thực hiện trên bề mặt của mặt cầu đơn vị. Có nghĩa là giá trị
ra của nội suy tuyến tính từ điểm P đến điểm Q trên mặt cầu đơn vị phải nằm dọc theo cung
ngắn nhất (trên mặt cầu đơn vị) kết nối các điểm P và Q.
Phân bố đầu vào đều nhau thì kết quả là các cung có độ dài như nhau.
Nếu P và Q đối diện theo đường chéo thì kết quả khơng xác định.
Thuộc tính
key: Tập giá trị đầu vào.
keyValue
 Tập giá trị đầu ra
 Số lượng normal trong trường keyValue phải là bội số của số keyframe trong
trường key. Bội số nguyên đó xác định có bao nhiêu normal sẽ được chứa trong
sự kiện value_changed.
Sự kiện
set_fraction: Giá trị đầu vào.
value_changed

 Giá trị đầu ra.
 Hai sự kiện này kết nối với nhau, hoạt động đồng thời
Ví dụ
#VRML V2.0 utf8
Group {
children [
DEF NI NormalInterpolator {
key [ 0.0, 1.0 ]
keyValue [
.707 0 .707, .707 0 -.707, -.707 0 -.707, -.707 0 .707, 0 1 0,
1 0 0, 1 0 0, -1 0 0, -1 0 0, 0 1 0
]
}
Shape {
geometry IndexedFaceSet {


coord Coordinate {
point [ 1 0 1, 1 0 -1, -1 0 -1, -1 0 1, 0 3 0 ]
}
coordIndex [ 0 1 4 -1, 1 2 4 -1, 2 3 4 -1, 3 0 4 ]
normal DEF N Normal {
vector [
.707 0 .707, .707 0 -.707, -.707 0 -.707, -.707 0 .707, 0 1 0
]
}
}
appearance Appearance {
material Material {
diffuseColor 1 1 1

}
}
}
DEF T TouchSensor {} # Click to start the morph
DEF TS TimeSensor { # Drives the interpolator
cycleInterval 3.0 # 3 second normal morph
loop TRUE
}
Background {
skyColor 1 1 1
}
]
}
ROUTE NI.value_changed TO N.vector
ROUTE T.touchTime TO TS.startTime


ROUTE TS.fraction_changed TO NI.set_fraction



×