コンピュータグラフィックス基礎の成果報告

久々の更新です。
早いもので大学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を自分の研究としてもいいなーとか思ってしまいました。
Related Posts
Books
ブログ執筆者の著書




