プログラミング演習3 李 亜民クラス 第3回 モデルづくりとグラデーション 今回の内容 概念説明 作業 モデル作成 グラデーション 隠面消去 Vertexクラス、Pixelクラス変更 課題について 概念説明 モデルづくり グラデーション 隠面消去 3Dグラフィックスパイプライン ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 3Dモデル構築 モデル変換 バーテックス処理 ビューポート変換 バックフェースカリング ラスタライズ ピクセルシェーディング Zバッファの適用 :第3回 :第1回 :第4回 :第1回 :第3回 :第2回 :第4回 :第3回 モデル作成 3DCGにおいて、モデルは三角形ポリゴンの集合体 例外も存在する(多角形ポリゴン、メタボールetc.) 頂点(Vertex)配列と三角形ポリゴン(Face)配列で構築 Vertexを配置した後、展開図を参考にFaceを作っていくと良い モデルを作る時の注意 Vertex配列とFace配列は別に用意すること 座標変換は全Vertexに1回だけ行う必要がある Faceを介さずに全Vertexにアクセスできるように Faceの初期化時に生成済みのVertexを渡せば良い 一つの頂点を複数の面で共有する場合もある Faceを作る際には渡すVertexの順番に注意 A,B,Cが時計回りになっている側を表とする グラデーション Vertexにr,g,bパラメータを持たせ、scan/spanの際に同様 にして補間することで色を付ける 補間の仕様上、三角形の中心は3色の中間色になるが四角 形の中心は対角頂点の中間色になる(右) 隠面消去 ポリゴンが増えると、重なるポリゴンが出てくる 素直に描画すると最後に描画した面が手前に出てくる ポリゴンの裏面は基本的に描画しない 隠面消去を行う必要がある Zバッファ 手前にあるポリゴンのみ描画 バックフェースカリング 背面は描画しない バックフェースカリング カメラから見て反対側を向いている面は描画しない 法線を使用 ラスタライズ時に確認し、背面なら以降のプロセスをスキップ して次の面へ 面の重複を防ぐ他、計算量も削減できる Zバッファ キャンバスの全ピクセルについてZ値を記録 Zバッファよりも手前ならば色を上書きし、Zバッファを更新。そ うでなければ破棄。 スクリーン座標ではZ軸は奥側なので、Zバッファの初期値は 適当な大きい値。 Zバッファは毎フレーム更新 回転する立方体+固定三角形の 交差イメージ 作業 Pixel,Vertex,Face修正 Pixel, Vertexを一部変更 メンバ変数追加 コンストラクタ double r, g, b :頂点カラー(0.0~1.0) x,y,z,r,g,b指定コンストラクタを追加 その他任意に メソッド Pixel lerp(…) :r, g, bの補間を追加 Color getColor() : r,g,bからColorを取得して返す r,g,bが0.0~1.0の範囲に収まっていることを確認した上で、 Color(float r, float g, float b)を用いてColorを取得する Face.getNormal()追加 Vector getNormal() 面法線ベクトルを返す 頂点が時計回りになっている側をポリゴンの表とする 外積(Vector.cross)を使用する 下の図で、法線𝑵 = 𝐴𝐶 × 𝐴𝐵となる 第3回課題 1. 三角形にグラデーションをかけて下さい。 クラス:lec03に記述 合わせて、バックフェースカリングを確認してください。 以後の課題はメソッド呼び出しで切り替えられるように。 2. 立方体を作成し、描画して下さい。 合わせて、Zバッファの動作を確認して下さい。 交差するポリゴンを追加する、等。 3. [発展] 以下の中から選択してください(複数可)。 A. HSVカラーを展開した球を描画して下さい。 B. 楕円体を描画して下さい。 C. Maya等で作ったモデルを読み込めるようにして下さい。 課題の実行イメージ 課題1 課題2 (Zバッファの確認については当該ページ参照) 課題の実行イメージ [発展]HSV球 [発展]ファイル読み込み .objファイル(Shadeの標準形式)用 インポーターを記述して使用。 (シェーディング済み)
© Copyright 2024 ExpyDoc