久々の更新です。
早いもので大学2年の授業が終わって春休みになってしまいました。
3学期には、コンピュータグラフィックス基礎という授業を履修したのですが、 今学期で一番楽しい授業だったなーと思うので振り返ってみます。
基本的にはOpenGLを使って色々しました。
特に力を入れた課題などを紹介します。
ソースコードなどはすべてgithubにあるので、 気になる人はぜひ見てね!
課題3 ASTEROIDS
OpenGLを使ってアニメーションを作るという課題があったので、 全方位シューティングゲームを作ってみました。
技術的な点だと、自機、隕石、弾の3つは、慣性移動、衝突判定、描画などは共通の処理でできるので、
この3つをobject
という構造体1つで管理して、同じような処理を何度も書かないようにしました。
課題4 立体の展開図
OpenGLの回転と平行移動を駆使して、立体の展開図のアニメーションを作りました。
まずは立方体の展開図。
正12面体となると、座標の計算が大変でしたが、気合で実装しました。
課題5 ベジエ曲線
マウスで制御点を入力してベジエ曲線を描く課題です。
定義式をプログラムにするだけの簡単なお仕事でした。
オプションとして3次元バージョンにも挑戦しました。
課題7 OBJファイルで立体を表現
OBJファイルという、頂点と面の2つの情報で立体を表す立体図形のフォーマットがあるのですが、 このOBJファイルを出力するプログラムを作りました。
ちなみに、OBJファイルを描画するプログラムは先生の方で用意してくれました。
球体は普通にやると頂点部分で例外処理があって面倒ですが、頂点部分に複数の頂点がくるようにして楽しました。
Wikipediaにトーラスの式があるので、それを参考にして作りました。
球の課題の式の定義部分を変更するだけで、できたので楽でした。
3角関数で半径を変化させて、適当な回転体を作りました。
また、マウスで入力した線から任意の回転体を作ったりしました。
また、マウスで線を描くときに下から上に線を引くと、面が裏返るので、それを利用してプリンみたいなのも作りました。
課題9 レイトレーシング
レイトレーシングをやりました。
普通にやるとつまらないので、いろいろ工夫しました。
- レイを再帰的に計算して、ピカピカに
- 3x3でアンチエイリアス
- 色は乱数でRGBを求めると鮮やかにならないので、HSVで計算
- Zbuffer的な概念を取り入れて、球が床に食い込んでも重なっても大丈夫なように
課題10 布のシュミレーション
Mass-Spring モデルによる簡易的な布の物理シミュレーションをしました。
球体との衝突判定を追加してみたのが次です。
まとめ
こうして振り返ると、かなり色々な課題に挑戦しましたが、どれも楽しかったです。
CGを自分の研究としてもいいなーとか思ってしまいました。