近状報告
早いもので大学3年の授業が終わってCOJTを残すのみとなってしまいました。
一昨日成績開示があったのですが、卒業に必要な単位のうち取り切っていないのは、 卒業研究と技術英語と体育だけなので、実質的に大学の授業は取り終わったに等しいです。
3年の秋学期のABモジュールに開講された、インタラクティブCGという授業を履修したのですが、 今学期で一番楽しい授業だったと思うので、振り返ってみます。
ちなみに、去年にも似たような記事を書いていました。
インタラクティブCGとは
基本的には、C++で OpenGL と FLTK を使ってゴリゴリCG関係のプログラミングをする感じでした。
この授業の面白い特徴として、毎回の課題で受講者全員で投票を行うコンテストがありました。
コンテストで上位3名に入賞すると、図書カードがゲットできます!!
結論から言うと、全3回のコンテストで、3回とも入賞することができました!!
これはこれまで誰も成し遂げたことがない未踏の快挙らしいです。
全3回の課題を振り返ってみます。
課題1 Impressionist
課題の概要
説明が面倒なので、授業の課題の概要から引用します。
Impressionist ~印象派風に画像をレンダリングするプログラム~
印象派(Impressionist)というプログラムは印象派の書いた絵のような画像を作り出すインタラクティブなプログラムです。印象派画像を作り出すために、ユーザは画像を読み込み空白のピクセルキャンバスに一連の“ブラシストローク”を書き込む。これらのブラシストロークはもとの画像から色を取り込み、以下のサンプルのような、絵画のような感じを作り出す。要は写真から、油絵風の画像を作る。
成果物
星型のブラシを実装して、2匹のトラの画像を加工して、こんな画像を作りました。
コンテスト結果
3位に入賞して、図書館500円分をゲットしました。
正直、この課題は元の画像を選ぶセンスが90%くらいな気がしました。
課題2 Modeler
課題の概要
だいたいこんな感じの課題でした。
- OpenGL でプリミティブを描画する関数を作る。例えば、トーラス型(ドーナッツ型)など。
- それを組合せて何かモデルを作る。
- rotate や translate でモデルを可動させてアニメーションを作る。
成果物
ライオンがドーナッツを追いかけて走るアニメーションを作りました。
版権的にヤバそうなのは気のせいです。
ドーナッツ型は座標計算して、3角メッシュで表現しています。昔のコードが参考になりました。
実は、足の部分は回転体になっているのですが、楕円球で十分だったような気がします。
コンテスト結果
2位に入賞して、図書館500円分をゲットしました。
gifアニメのサイズが2MB以上になってしまって、焦りました。
課題3 RayTracer
課題の概要
だいたいこんな感じの課題でした。
- POV-Ray 互換のアプリをC++で実装する(さすがにゼロベースではキツイので、雛形みたいのはありました)
- POV-Ray ファイルを作って、1. のプログラムで描画させる
POV-Ray というのは、レイトレーシングソフトウェアのことです。
成果物
1.のPOV-Ray 互換のアプリに、こんな機能を実装しました。
- trimesh(3角メッシュの集合)の描画
- 再帰的なレイの反射
- 再帰的なレイの屈折
2.は、プログラミング言語のRubyをつかって、宝石のRubyのPOV-Rayファイルを頑張って生成しました。
ブリリアンカットという形状を、trimeshで表現しています。
Xファイル パースして POV-Ray の trimesh に変換しつつ、うまい具合に配置するRubyのコードを実装しました。
光源の設定をするのが非常に大変でした。
下の画像は、アンチエイリアスするために、2倍で描画して、Macのプレビューで縮小したものです。
コンテスト結果
1位に入賞しました。まだ、図書カードは貰ってないので、早く欲しいです(2015/12/16追記。受け取れないうちに大学を卒業してしまいました…)。