サイログ。

~雑多な記事置き場~

Ruby+Ruby/SDL+ruby-openglみたび

先日はどうもすみませんでした。お詫びします。
実は、透過射影の視線の位置が計算できないとわめいていましたが、原因は単純な思い違いでした。

図で言う横の長さを求めるのに、縦240pxから求めるときに、視野角いっぱいの30度で計算していたからでした。
求める高さは半分なんだから、角度も半分になるのに気づいてませんでした。

早速、計算し直したら、あっさりと求める値が出てきました。

z = 240 * cos(15) / sin(15) = 895.6921938165307

おおよそ900になりました。ああ、ようやく求まったよ(笑)。

で、これをRubyのプログラムにしたのがこれ。

def resize(w, h)
  theta = 15.0
  radian = 2.0 * Math::PI * theta / 360.0
  z = (h/2) * Math.cos(radian) / Math.sin(radian)
  gluPerspective(theta*2, w/h, -1.0, 1.0)
  gluLookAt(w/2,h/2,-z,w/2,h/2,0.0,0.0,1.0,0.0)
end

役に立つかどうかは分かりませんが、ご活用くださいませ。