|Topic was automatically imported from the old Question2Answer platform.
I’m getting mouse dragging velocity like so:
var mouse_dragging = false
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
mouse_dragging = event.pressed
if event is InputEventMouseMotion and mouse_dragging:
_pan(-event.velocity.x / 5000, -event.velocity.y / 5000)
_pan function moves the camera along the X/Z plane in world units.
Is there a way to convert
event.velocity (which is in pixels per second) into world units?
Maybe I’m better off doing a ray-cast of
event.position to get world coordinates somehow?
World units depends on which depth you expect the pan to be applied. It’s like you are dragging a 3D plane facing the camera, but that plane could be at different distance from the camera, which means different speeds would be needed to match the speed of the mouse.
If you want panning speed to depend on the surface that the mouse cursor would hit in 3D, then you have to do a raycast to determine how far it is from the camera.
Then you would calculate a factor from pixels/s into m/s.
Instinctively I would project the previous and current mouse’s coordinates at that distance, then calculate the vector between the two and pan by that amount. But maybe there is a smarter way to do this? I bet it just depends on
fov and distance somewhat, maybe also
Zylann | 2023-07-06 16:28