※この項は私が3Dゲームを自作し始めたころに模索した理論の備忘録です。
間違いや非効率な点があるかもしれませんのでご注意ください。
3DCGとは
3DCGはその名の通り三次元空間上に置かれたオブジェクトを描画するシステムのことだと思う。
そのオブジェクトは点、辺、面で構成され、描画システム上では点の位置を管理し面を画面上に映し出すことが主な目的です。また必要に応じて辺を使用します。
面を扱う
3DCGで扱われる面は一般的に三角形か四角形のどちらかです。
四角形は三次元空間上にランダムに4点を配置すると平面にならない場合があるため、以前は必ず平面になる三角形で扱うのが良いとされてきました。立体物を描画するために面を取り出しているのに、その面が立体だと堂々巡りですからね。
しかし近年では、描画システムの向上により平面でない四角形でも補正して描画してくれるのため、あまり気にしなくてよくなったのかもしれません。(自分で0からシステムを組むときは気を付けよう)
上記の理由から五角形以上でも描画はできますが、製作者の意図しない補間になる可能性が高くなるため使用は避けましょう。
面を描画する
面を描画するために必要な下準備があるのでここで紹介する。描画の基礎システムは省略。
1.まず面の位置を把握するために点の位置を把握する。
オブジェクトが動いたとき、その情報はまず点に送られ保管される。
2.面の向きを計算する
オブジェクトを形成する面のうち後ろを向いているものを判別する。
オブジェクトが閉じられたトポロジーであるとき(ここはよく分からない)後ろを向いて見えていない 面を描画処理からふるい落とすことでほぼ半分の描画数に削減できる。
計算方法は以下の通り
点A,B,Cからなる面を描画するとき
・面を構成する辺のベクトルを2本求める。(例:点B-点A、点C-点A)
辺ベクトルの選択によって面の裏表が反転する場合があるので注意が必要です。
無難な選択は面の正面から見て時計回りに点を選択していくことです。
・2本の辺ベクトルから外積を計算し法線ベクトルを求める。
・カメラのベクトルを用意する(カメラの管理方法によるためここは省略しますが、画面がどこを向いているのか確認することが目的)
・法線ベクトルとカメラのベクトルが成す角度を計算する。
この角度が90度以下のとき、カメラと同じような方向を向いていることになるためその面は後ろを向いていることになる。
3.他にも画面外にある面は描画しないなど、できるだけ計算数を抑える努力が必要です。
4.描画しよう。
今回はここまで
コメント