古川です。

>> ただ、そのおかげで以前から気づいていたけど
>> 直してなかったバグがとれました。
>> 
>> trackba.rb に以下のパッチを当てて下さい。
>
>む‥、enbugしてましたか‥、ごめんなさい。ありがとうございます。

いえ、犯人は私です。私の書いた trackball.rb がすでに
バグっていました。すみません。

trackball の wrapper をちょっと試したのですが、ペンギンさんは
回りませんね。で、これは tb_trackball() のなかで rb_ary_push()
すると、ruby 側での最初の Trackball::trackball() で
info.quat[3] = 1.0 となるべきところが info.quat[3] = 0.0,
info.quat[7] = 1.0 となってしまうからだと思います。該当箇所を

rb_ary_store(spin_quat, i, rb_float_new(q[i]));

に書き換えてくるくる回ることを確認しました。

tb_add_quats(), tb_build_rotmatrix() では rb_ary_new() してるんで
この問題は起こらないですけどね。

--------
古川大介