본문 바로가기

프로그래밍 기록/토이

트랙볼을 활용한 가난한자의 레이싱휠 제작

서피스 다이얼을 볼때 마다 생각했다..

영롱한 서피스 다이얼

저거 빙글빙글 돌아가는거면, 레이싱휠로 쓸수있는거 아닌감?

그렇게 생각하고 어언 4년이 다되가는데,

오늘 갑자기 진짜 레이싱휠을 로 만들수 있지 않을까 생각하다가, 저 쓰잘때기 없는 서피스 다이얼을 살까 고민까지 했다..

근데 12만원이라는 창렬한 가격에 고민하던 도중.. 옆을 봣는데

나는 왼쪽에는 트랙볼을 두고 쓴다.

엥 여기 있는 빙글빙글 휠 쓰면 되는거 아님?

영웅은 고민따위 하지않는법

일반 마우스휠이라, 별도 서피스다이얼(Windows Wheel) 라이브러리 같은것도 필요없이

걍 마우스 휠 이벤트 후킹해서 가져오면된다. (따라서 그냥 마우스 휠로도 조작이 된다) 다만 휠처럼 부드럽게 움직이지는 않으므로 적당히 감안해서..

(여담. 이거아니었으면, 한 만원되는 볼륨조절용 노브사서, 음량에 따라 움직이는 휠 만들려고했다 후후)

 

근데 조작 뒤지게 어려움 ㅠ

 

정석대로라면, XInput 가상 Driver 로 만들어야 할텐데, 그렇게 하긴 싫고 (넘 어렵고)

njz3/vJoy: Virtual Joystick (github.com)

 

GitHub - njz3/vJoy: Virtual Joystick

Virtual Joystick. Contribute to njz3/vJoy development by creating an account on GitHub.

github.com

 

요거 깔면, 가상 vJoystick 이 설치되고 여기에 포함된 dll 으로 조작할수 있다.

여기에 Nuget 으로 `Gma.System.MouseKeyHook` 쓸수있게 받아서 글로벌 이벤트로 받아서 x 축값만 세팅해주면 끗

 

            Power += e.Delta;
            var angle = Power / 26.67 + 90 ;

            double theta_radian = angle * (Math.PI / 180);

            double x = Math.Cos(theta_radian);
            double y = Math.Sin(theta_radian);
            // Normalize to 0 ~ 32767 range
            int normalized_X = (int)((x + 1) / 2 * 32767);
            int normalized_Y = (int)((y + 1) / 2 * 32767);

 대충 한틱에 내컴퓨터 기준 delta 값이 120 뜨고, 한바퀴 돌리는데 대충 80틱정도 되길래 적절히 계산..

후 X,Y 값 적절히 계산.. (찍어보니 vJoystick Max 값이 32767 이길래 정규화)

하면 끝.. (근데 X값만 쓰더라 저 게임에선)

 

포르자로 테스트하려했는데, 이거 한번 확인해보겠다고 100기가 다운받는건 오바다 싶어서 RACE07 이라는 무료로 받은 게임이 스팀에 있길래 요걸로.. (근데 이거 xbox 360 시절 게임이라 XInput 이 아니라 DirectInput 인듯 ㅠ)

암튼 테스트후 vJoystick 과 함께 같이 칼삭

728x90