About this Blog

This Blog has English posts and Japanese posts. About Mac, iOS, Objective-C, and so on.

2013年5月8日水曜日

Ubuntu+Ruby1.9.3+OpenGL+joystick(Xboxのコントローラ)

enthusiastick coding: Ubuntu+RubyでX-BOXのコントローラを使う(gem不使用)で接続したXboxのコントローラでの入力をOpenGLに反映させてみます。

参考にしたのは、
Pablotron: Joystick-Rubyで落としてきたtarボールに入っていたサンプルコードのxo.rb
require 'opengl'
require 'glut'
require 'joystick'
INTERVAL = 50
# 中略
$joy = Joystick::Device::open "/dev/input/js0" # 環境に応じて書き換えてください。
$foo = 0.0 # ジョイスティックからの入力を反映させたい変数。
timer_func = Proc.new{
  foo_diff = 0
  while $joy.pending?
    ev = $joy.next_event
    case ev.type
      when Joystick::Event::AXIS
        case ev.num
        when 0
          foo_diff = ev.value/1000.0 #AXISの値は-32767から32767
        end
      when Joystick::Event::BUTTON
        case ev.num
        when 0
          puts ev.value #=> ボタンが押された時: 1, ボタンが離された時: 0
          # ボタンに反応させたい時はここに具体的な処理を書いてください。
        end
      end
  end
  $foo += foo_diff
}
# 中略
GLUT.TimerFunc(INTERVAL, timer_func, 0)
# 後略
joystickからの入力値はバッファにためられるので、ただ一定時間ごとに値を取得してOpenGLの描画に反映させてもうまく動きません。
そこで、毎回バッファをクリアして最新の値を取得してするようにしています。
joystickの入力をトリガにするという手もありますが、今回はこれで。

0 件のコメント:

コメントを投稿