3DCG

Python3で「OpenGL」を学ぶ 「PyOpenGL」PyCG lesson2 基本的な3Dレンダリングとライティング

lesson2を学んだ。順にそれぞれ自分の理解をメモしながらまとめる。

イルミネーション効果を使った3Dオブジェクトのレンダリングの基本を確認する。

変換行列

画面上に3Dオブジェクトをどのように描画するか決定する3つの行列がある。すべての3次元変換を1つの行列で表現するために、同次座標(Homogeneous coordinates)を使用している。通常、モデル行列とビュー行列は線形変換(並行移動、回転、スケールの組み合わせ)であり、投影行列は直交座標遠近法のいずれか。

変換行列 (引用: learnopengl)

変換行列はよく利用されるため、共通のライブラリを用意する(サンプルでは、実装は gl_lib/transmat.py として用意されている)。

カメラ

カメラ (引用: learnopengl)

前項にあるようにカメラを基準にワールド空間からビュー空間に座標が変換される。シンプルな一人称視点のようなカメラを実装する場合、視野方向を制御する2つのパラメータ(ピッチとヨー)がある。サンプルの実装は gl_lib/fps_camera.py にある。

シェーディング

3Dモデルやイラストにおいて、暗さのレベルを変化させて奥行きの知覚を描画する。シェーディングモデルには、フォンシェーディング異方性シェーディングトゥーンシェーディングなどがある。

この章のまとめのデモ

コードは参考にした記事GitHubを参照。

  • “W, A, S, D” と、マウスを使ってシーンを移動する
  • “ESC” を押下で、終了
  • “o” を押下で、異方性シェーディングを切り替える
  • “p “を押下で、スクリーンショットを撮る