LoginSignup
0
0

More than 5 years have passed since last update.

Wintabに干渉せずにペンタブの傾きデータを取りたい

Posted at

どうして必要だったか

生放送向けにLive2Dが操作に連動する仕組みを作っていた時
ペンタブの動きを傾きまで真似るようになれば、より描いている感がでるだろうということで
ペンタブの老舗、Wacomのデベロッパー向けサイトで情報収集
そこでWintabというペンタブなどのデジタイザむけのAPIを知って
当初はこれを使って傾きデータを取得する方法をとっていた

wintabではなにがダメだったか

Wintabというのは基本ペイントソフト向けのAPIである
想定としてペンタブ情報を扱うのはペイントソフトだけ
そこでWTOverlapとWTEnableによるフォーカスが問題となった
ペンタブ情報を取得するにはWintabのフォーカスを取らねばならないが
フォーカスを取るとペイントソフトへの情報が途絶する
お絵かき配信を目的とした場合は本末転倒になる

HIDへのアクセス

Wintab内でアレコレ干渉しないように頑張ってみたものの、どうしても干渉する
そこで方針を転換した
ペンタブはだいたいUSBで接続されるが、USB接続の操作系デバイスはWindowsに
”ヒューマンインタフェースデバイス”として認識される
ワコムのペンタブも例外ではない
hid.PNG

USBからデータが来て動いているのだから何かしらのアクセス方法があるだろうと調べると
そのまんまHIDという仕組みでUSBとIOアクセルできるようになっていた
もともとはデバイスドライバを作るためのモノで
USBが出回り始めた頃の技術でhid32.dllのAPIを使ってアクセスする方式だ
こまかい方法はなかなか取れないバグもあって正当な方法を示せないので他を参照してもらいたい

wintabの実態として

ワコムのWindowsFAQにこういう記述がある
wacom.PNG
VID、UsagePage、UsageはHIDアクセスに必要なデバイス特定コード
VIDはメーカーで固定なのでそのまま使うのだが
hclientでデバイスリストを覗くとワコムのVIDが他にも幾つか出てくる
UP=0xd、U=0x01は正当に見えてフォーカスを持っていないとデータが来ない
つまるところWintabの処理済みデータが入っていると思われる
現在の生データがはいってるのは別のポートで
UP=0xff00、U=0xaである

こちらのデータはフォーカスを持っていなくてもデータが来る。
しかしデータが整形されていないのでこちら側でデータの整形をしなければならない
整形.PNG
整形はこんな感じ

総評として

どうしてもWintabに干渉せずにデータを取りたかったので行った今回の方法
問題点としては標準APIではないので最悪デバイスごとにプログラムを用意しないといけないのが最大のデメリット
ワコム以外のペンタブなら確実に必要になります
Wintabに標準でデータを取るAPIが用意されれば一番よいのですけどね……
それでもお絵かきLive2D配信では干渉しないのは必須機能

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0