やすしです。

遅くなりました。
# つかれた‥‥。

From: Daisuke Furukawa <dfuru / suenaga.cse.nagoya-u.ac.jp>
Subject: [ruby-ext:01044] Re: Ruby/GtkGLArea
Date: Mon, 10 Apr 2000 19:17:28 +0900 (JST)

> ただ、そのおかげで以前から気づいていたけど
> 直してなかったバグがとれました。
> 
> trackba.rb に以下のパッチを当てて下さい。

む‥、enbugしてましたか‥、ごめんなさい。ありがとうございます。

じつは、trackballの wrapperを書いてしまいました(^^; bottle neckにはなっ
てないんでしょうけど‥。

とりあえず、これに付けてみます。APIがちょっと変ってるので気をつけてくだ
さい。

# testだけなら早いです。
--
         yashi

/* -*- c-file-style: "ruby" -*- * Copyright (C) 1999-2000 Yasushi Shoji * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "trackball.h" #include "ruby.h" static VALUE tb_trackball(self, spin_quat, p1x, p1y, p2x, p2y) VALUE self, spin_quat, p1x, p1y, p2x, p2y; { float q[4]; int i; trackball(q, (float)NUM2DBL(p1x), (float)NUM2DBL(p1y), (float)NUM2DBL(p2x), (float)NUM2DBL(p2y)); for (i=0; i<4; i++) rb_ary_push(spin_quat, rb_float_new(q[i])); return Qnil; } static VALUE tb_add_quats(self, vq1, vq2) VALUE self, vq1, vq2; { static float q1[4], q2[4], dest[4]; int i; VALUE vdest = rb_ary_new(); for (i=0; i<4; i++) q1[i] = NUM2DBL(RARRAY(vq1)->ptr[i]); for (i=0; i<4; i++) q2[i] = NUM2DBL(RARRAY(vq2)->ptr[i]); add_quats(q1, q2, dest); for (i=0; i<4; i++) rb_ary_push(vdest, rb_float_new(dest[i])); return vdest; } static VALUE tb_build_rotmatrix(self, vq) VALUE self, vq; { float m[4][4], q[4]; int i, j; VALUE vm = rb_ary_new(); for (i=0; i<4; i++) q[i] = NUM2DBL(RARRAY(vq)->ptr[i]); build_rotmatrix(m, q); for (i=0; i<4; i++) for (j=0; j<4; j++) rb_ary_push(vm, rb_float_new(m[i][j])); return vm; } Init_trackball() { VALUE mTrackBall; mTrackBall = rb_define_module("Trackball"); rb_define_module_function(mTrackBall, "trackball", tb_trackball, 5); rb_define_module_function(mTrackBall, "add_quats", tb_add_quats, 2); rb_define_module_function(mTrackBall, "build_rotmatrix", tb_build_rotmatrix, 1); }