Skip to content

Commit

Permalink
Merge #185
Browse files Browse the repository at this point in the history
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
  • Loading branch information
bors[bot] committed Feb 24, 2018
2 parents eb62697 + 669640e commit 5689bda
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 25 deletions.
2 changes: 1 addition & 1 deletion examples/obj.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fn main() {
let obj_path = concat!(env!("CARGO_MANIFEST_DIR"), "/test_data/car.obj");
let path = args.nth(1).unwrap_or(obj_path.into());
let mut win = three::Window::new("Three-rs obj loading example");
let cam = win.factory.perspective_camera(60.0, 1.0 .. 10.0);
let cam = win.factory.perspective_camera(60.0, 1.0 .. 1000.0);
let mut controls = three::controls::Orbit::builder(&cam)
.position([0.0, 2.0, -5.0])
.target([0.0, 0.0, 0.0])
Expand Down
42 changes: 20 additions & 22 deletions src/controls/orbit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,27 +122,25 @@ impl Orbit {
&mut self,
input: &Input,
) {
if !input.hit(self.button) && input.mouse_wheel().abs() < 1e-6 {
return;
}

if input.mouse_movements().len() > 0 {
let mouse_delta = input.mouse_delta_ndc();
let pre = Decomposed {
disp: -self.target.to_vec(),
..Decomposed::one()
};
let q_ver = Quaternion::from_angle_y(Rad(self.speed * (mouse_delta.x)));
let axis = self.transform.rot * Vector3::unit_x();
let q_hor = Quaternion::from_axis_angle(axis, Rad(self.speed * (mouse_delta.y)));
let post = Decomposed {
scale: 1.0 + input.mouse_wheel() / 1000.0,
rot: q_hor * q_ver,
disp: self.target.to_vec(),
};
self.transform = post.concat(&pre.concat(&self.transform));
let pf: mint::Vector3<f32> = self.transform.disp.into();
self.object.set_transform(pf, self.transform.rot, 1.0);
}
let mouse_delta = if input.hit(self.button) {
input.mouse_delta_ndc()
} else {
[0.0, 0.0].into()
};
let pre = Decomposed {
disp: -self.target.to_vec(),
..Decomposed::one()
};
let q_ver = Quaternion::from_angle_y(Rad(self.speed * (mouse_delta.x)));
let axis = self.transform.rot * Vector3::unit_x();
let q_hor = Quaternion::from_axis_angle(axis, Rad(self.speed * (mouse_delta.y)));
let post = Decomposed {
scale: 1.0 + input.mouse_wheel() / 1000.0,
rot: q_hor * q_ver,
disp: self.target.to_vec(),
};
self.transform = post.concat(&pre.concat(&self.transform));
let pf: mint::Vector3<f32> = self.transform.disp.into();
self.object.set_transform(pf, self.transform.rot, 1.0);
}
}
8 changes: 6 additions & 2 deletions src/input/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,12 @@ impl Delta for axis::Key {
&self,
input: &Input,
) -> Option<TimerDuration> {
self.delta(input)
.map(|delta| delta as TimerDuration * input.delta_time())
match (self.pos.hit(input), self.neg.hit(input)) {
(true, true) => Some(0),
(true, false) => Some(1),
(false, true) => Some(-1),
(false, false) => None,
}.map(|delta| delta as TimerDuration * input.delta_time())
}
}

Expand Down

0 comments on commit 5689bda

Please sign in to comment.