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

久々の更新です。

早いもので大学2年の授業が終わって春休みになってしまいました。

3学期には、コンピュータグラフィックス基礎という授業を履修したのですが、 今学期で一番楽しい授業だったなーと思うので振り返ってみます。

基本的にはOpenGLを使って色々しました。

特に力を入れた課題などを紹介します。

ソースコードなどはすべてgithubにあるので、 気になる人はぜひ見てね!

課題3 ASTEROIDS

OpenGLを使ってアニメーションを作るという課題があったので、 全方位シューティングゲームを作ってみました。

技術的な点だと、自機、隕石、弾の3つは、慣性移動、衝突判定、描画などは共通の処理でできるので、 この3つをobjectという構造体1つで管理して、同じような処理を何度も書かないようにしました。

title画面

プレイ中

ゲームオーバー

課題4 立体の展開図

OpenGLの回転と平行移動を駆使して、立体の展開図のアニメーションを作りました。

まずは立方体の展開図。

立方体-1 立方体-2 立方体-3

正12面体となると、座標の計算が大変でしたが、気合で実装しました。

正12面体-1 正12面体-2 正12面体-3 正12面体-4

課題5 ベジエ曲線

マウスで制御点を入力してベジエ曲線を描く課題です。

定義式をプログラムにするだけの簡単なお仕事でした。

制御点が3次のベジエ曲線

オプションとして3次元バージョンにも挑戦しました。

制御点が3次のベジエ曲線の3次元

課題7 OBJファイルで立体を表現

OBJファイルという、頂点と面の2つの情報で立体を表す立体図形のフォーマットがあるのですが、 このOBJファイルを出力するプログラムを作りました。

ちなみに、OBJファイルを描画するプログラムは先生の方で用意してくれました。

球体は普通にやると頂点部分で例外処理があって面倒ですが、頂点部分に複数の頂点がくるようにして楽しました。

球体

Wikipediaにトーラスの式があるので、それを参考にして作りました。

球の課題の式の定義部分を変更するだけで、できたので楽でした。

トーラス

3角関数で半径を変化させて、適当な回転体を作りました。

回転体

また、マウスで入力した線から任意の回転体を作ったりしました。

UFO コマ グラス hoge

また、マウスで線を描くときに下から上に線を引くと、面が裏返るので、それを利用してプリンみたいなのも作りました。

プリン

課題9 レイトレーシング

レイトレーシングをやりました。

普通にやるとつまらないので、いろいろ工夫しました。

  • レイを再帰的に計算して、ピカピカに
  • 3x3でアンチエイリアス
  • 色は乱数でRGBを求めると鮮やかにならないので、HSVで計算
  • Zbuffer的な概念を取り入れて、球が床に食い込んでも重なっても大丈夫なように

レイトレーシング1 レイトレーシング2 レイトレーシング3 レイトレーシング4 レイトレーシング5 レイトレーシング6

課題10 布のシュミレーション

Mass-Spring モデルによる簡易的な布の物理シミュレーションをしました。

布のシュミレーション

球体との衝突判定を追加してみたのが次です。

布のシュミレーション(球との衝突)

まとめ

こうして振り返ると、かなり色々な課題に挑戦しましたが、どれも楽しかったです。

CGを自分の研究としてもいいなーとか思ってしまいました。

comments powered by Disqus

gam0022.net

Qiita