Skip to content

Commit 5689bda

Browse files
committed
Merge #185
185: Fix timed method in Delta implementation for axis::Key r=kvark a=vitvakatu Aaaand again. Now the problem has been spotted in `gltf` example. UPD: closes #180
2 parents eb62697 + 669640e commit 5689bda

3 files changed

Lines changed: 27 additions & 25 deletions

File tree

examples/obj.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn main() {
88
let obj_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test_data/car.obj");
99
let path = args.nth(1).unwrap_or(obj_path.into());
1010
let mut win = three::Window::new("Three-rs obj loading example");
11-
let cam = win.factory.perspective_camera(60.0, 1.0 .. 10.0);
11+
let cam = win.factory.perspective_camera(60.0, 1.0 .. 1000.0);
1212
let mut controls = three::controls::Orbit::builder(&cam)
1313
.position([0.0, 2.0, -5.0])
1414
.target([0.0, 0.0, 0.0])

src/controls/orbit.rs

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -122,27 +122,25 @@ impl Orbit {
122122
&mut self,
123123
input: &Input,
124124
) {
125-
if !input.hit(self.button) && input.mouse_wheel().abs() < 1e-6 {
126-
return;
127-
}
128-
129-
if input.mouse_movements().len() > 0 {
130-
let mouse_delta = input.mouse_delta_ndc();
131-
let pre = Decomposed {
132-
disp: -self.target.to_vec(),
133-
..Decomposed::one()
134-
};
135-
let q_ver = Quaternion::from_angle_y(Rad(self.speed * (mouse_delta.x)));
136-
let axis = self.transform.rot * Vector3::unit_x();
137-
let q_hor = Quaternion::from_axis_angle(axis, Rad(self.speed * (mouse_delta.y)));
138-
let post = Decomposed {
139-
scale: 1.0 + input.mouse_wheel() / 1000.0,
140-
rot: q_hor * q_ver,
141-
disp: self.target.to_vec(),
142-
};
143-
self.transform = post.concat(&pre.concat(&self.transform));
144-
let pf: mint::Vector3<f32> = self.transform.disp.into();
145-
self.object.set_transform(pf, self.transform.rot, 1.0);
146-
}
125+
let mouse_delta = if input.hit(self.button) {
126+
input.mouse_delta_ndc()
127+
} else {
128+
[0.0, 0.0].into()
129+
};
130+
let pre = Decomposed {
131+
disp: -self.target.to_vec(),
132+
..Decomposed::one()
133+
};
134+
let q_ver = Quaternion::from_angle_y(Rad(self.speed * (mouse_delta.x)));
135+
let axis = self.transform.rot * Vector3::unit_x();
136+
let q_hor = Quaternion::from_axis_angle(axis, Rad(self.speed * (mouse_delta.y)));
137+
let post = Decomposed {
138+
scale: 1.0 + input.mouse_wheel() / 1000.0,
139+
rot: q_hor * q_ver,
140+
disp: self.target.to_vec(),
141+
};
142+
self.transform = post.concat(&pre.concat(&self.transform));
143+
let pf: mint::Vector3<f32> = self.transform.disp.into();
144+
self.object.set_transform(pf, self.transform.rot, 1.0);
147145
}
148146
}

src/input/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,12 @@ impl Delta for axis::Key {
480480
&self,
481481
input: &Input,
482482
) -> Option<TimerDuration> {
483-
self.delta(input)
484-
.map(|delta| delta as TimerDuration * input.delta_time())
483+
match (self.pos.hit(input), self.neg.hit(input)) {
484+
(true, true) => Some(0),
485+
(true, false) => Some(1),
486+
(false, true) => Some(-1),
487+
(false, false) => None,
488+
}.map(|delta| delta as TimerDuration * input.delta_time())
485489
}
486490
}
487491

0 commit comments

Comments
 (0)