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
役に立つかどうかは分かりませんが、ご活用くださいませ。