About this Blog

This Blog has English posts and Japanese posts. About Mac, iOS, Objective-C, and so on.

2013年4月16日火曜日

ruby-openglで楕円体を描いてみた

参考
http://www.gamedev.net/topic/126624-generating-an-ellipsoid-in-opengl/

2013/04/23: 修正しました。
・不要なインクルードを削除しました。
・GLU.NewQuadric()は必要なかったので、削除しました。
・GLUTの拡張ということにしました。(描画自体は、OpenGLのみで大丈夫です)

使い方
require "./gl_ellipsoid.rb"
# 中心は(0,0,0)
# 第2引数: X軸方向の半径
# 第3引数: Y軸方向の半径
# 第4引数: Z軸方向の半径
# 第5,第6引数: 描画の細かさ
GL.Ellipsoid(1, 2, 3, 20, 20)

gl_ellipsoid.rb
require "opengl"
require "glut"

module GLUT
  extend Math
  def GLUT.Ellipsoid(x,y,z,slice,stack)
    tStep = Math::PI/slice.to_f
    sStep = Math::PI/stack.to_f
#   ワイヤーフレームで描きたい時は、コメントを外してください。
#   GL.PolygonMode(GL::FRONT_AND_BACK, GL::LINE)
    (-Math::PI/2).step(Math::PI/2+0.0001, tStep){|t|
      GL.Begin(GL::TRIANGLE_STRIP)
      (-Math::PI).step(Math::PI+0.0001, sStep){|s|
        GL.Normal(cos(t)*cos(s), cos(t)*sin(s), sin(t))
        GL.Vertex(x*cos(t)*cos(s), y*cos(t)*sin(s), z*sin(t))
        GL.Vertex(x*cos(t+tStep)*cos(s), y*cos(t+tStep)*sin(s), z*sin(t+tStep))
      }
      GL.End
    }
  end
end


0 件のコメント:

コメントを投稿