mouse control

This commit is contained in:
Quaternions 2023-07-21 00:53:28 -07:00
parent da90e23aa0
commit c8dbfc7268

View File

@ -7,7 +7,7 @@
// notice may not be copied, modified, or distributed except
// according to those terms.
use cgmath::{Matrix3, Matrix4, Point3, Rad, Vector3, Transform,Rotation, Quaternion};
use cgmath::{Matrix3, Matrix4, Rad, Vector2, Vector3, Rotation, Quaternion, Euler};
use strafe_client::{Normal, Position, INDICES, NORMALS, POSITIONS};
use std::{sync::Arc, time::Instant};
use vulkano::{
@ -50,7 +50,7 @@ use vulkano::{
};
use vulkano_win::VkSurfaceBuild;
use winit::{
event::{ElementState,KeyboardInput,VirtualKeyCode,Event, WindowEvent},
event::{ElementState,KeyboardInput,VirtualKeyCode,Event, WindowEvent, DeviceEvent},
event_loop::{ControlFlow, EventLoop},
window::{Window, WindowBuilder},
};
@ -285,8 +285,8 @@ fn main() {
let mut time = Instant::now();
//polution
let mut mouse = Vector2::new(0.0,0.0);
let mut pos = Vector3::new(0.0,0.0,0.0);
let mut orientation = Quaternion::new(1.0,0.0,0.0,0.0);
let mut controls:u32 = 0;
let fly_speed = 0.05;
event_loop.run(move |event, _, control_flow| {
@ -303,6 +303,15 @@ fn main() {
} => {
recreate_swapchain = true;
}
Event::DeviceEvent {
event:
DeviceEvent::MouseMotion {
delta,
},
..
} => {
mouse+=Vector2::from(delta);
}
Event::WindowEvent {
event:
WindowEvent::KeyboardInput {
@ -348,8 +357,10 @@ fn main() {
}
let time_now = Instant::now();
let dt = (time_now-time).as_secs_f64();
if dt > 1.0 / 60.0 {
if dt > 1.0 / 120.0 {
time = time_now;
let angles = Euler{x:Rad(mouse.y/128.),y:Rad(mouse.x/128.),z:Rad(0.0)};
let orientation=Quaternion::from(angles);
pos += orientation.rotate_vector(get_control_dir(controls))*fly_speed;
let window = surface.object().unwrap().downcast_ref::<Window>().unwrap();
@ -400,7 +411,7 @@ fn main() {
0.01,
100.0,
);
let view = Matrix4::from_translation(pos)+Matrix4::from(orientation);
let view = Matrix4::from_translation(pos)*Matrix4::from(angles);
let scale = Matrix4::from_scale(-0.01);
let uniform_data = vs::Data {