Yohei Kakiuchi - 2013-12-28

以下のコードで出来ますが、少しずれていてデバッグ中です。

(setq cam (make-camera-from-param :pwidth 160 :pheight 120 :fx 100 :fy 100 :cx 79.5 :cy 59.5 :name "cam"))

(setq obj (make-cube 100 100 100))
(send obj :translate #f(0 0 400))
(send obj :set-color #f(0 0 1))

(objects (list obj cam))

(setq camview
      (view
       :x 160 :y 120
       :viewing (send cam :viewing)
       :viewsurface
       (instance gl::glviewsurface :create
                 :glcon ((send *irtviewer* :viewer :viewsurface) . gl::glcon)
                 :title "view_test" :width 160 :height 120)
       :title "view_test"
       ))

(unix::usleep (* 200 1000))
(send cam :draw-objects camview (list obj))

(send cam :get-image camview)

(send cam :get-image camview
      :points (setq mat (make-matrix (* 160 120) 3)))

(setq pc (instance pointcloud :init :points mat))
(objects (list pc obj cam))

ずれる主原因は、euslisp/jskeus/eus/lisp/opengl/src/glview.lで
widthやheightから1引いているためのように思えます。
画像はこれを考慮して計算しているようです。jskの内部コードではwidthとheightは
xのwindowのwidthとheightと同じにしています。

これにどういう必要性があったか分からなくなっているように思えますが、
irteusglでここをoverwriteするか、glview.lを修正しても良いでしょうか?

  (:3d-mode ()
            (if (> x::width x::height)
                (glViewport 0 (- (/ (- x::width x::height) 2)) (- x::width 1)
                                         (- x::width 1))
              (glViewport (- (/ (- x::height x::width) 2)) 0 (- x::height 1)
                                         (- x::height 1)))
 

Last edit: Yohei Kakiuchi 2013-12-28