OpenGLで円を描画する

f:id:levelfour:20140201065624p:plain

2月になりました。OpenGLの季節だ(え
今回はOpenGLで円を描画する方法を紹介。
DXlibではDrawCircleを呼ぶだけで簡単に円が描けるみたい。
ところが、OpenGLには一発で円を書けるようなAPIは用意されていない。
ので、「単純に三角関数でパラメータ表示して描けばいいんじゃね?」という発想。

中心(a,b)、半径rの円は
x = a + r * cos(θ)
y = b + r * sin(θ)
でいける。


Point2dは座標、Polygon2dは座標配列、EllipseはPolygon2dのコンストラクタを円用に最適化したもの。
Ellipseのコンストラクタで円一周分の座標を打つ。
第4引数のpは、円一周2πを何分割するかという引数。

ちなみにpの値はデフォルトで180。
f:id:levelfour:20140201071200p:plain

本当はp=50でもほとんど円に見えるけど。
f:id:levelfour:20140201071230p:plain

p=24
f:id:levelfour:20140201071242p:plain

p=18
f:id:levelfour:20140201071300p:plain

p=12
f:id:levelfour:20140201071311p:plain

p=5
f:id:levelfour:20140201071322p:plain

んー美しきかな正五角形。

座標配列が初期化できたら、継承元のPolygon2d::drawを呼べばOK。
通常はOpenGLのコールバックの中で呼べばいいのかな。

今回の話とは関係ないけど、C++のクラスにもC#みたいなプロパティが欲しいなあ…