PowerPoint プレゼンテーション

プログラミング演習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の標準形式)用
インポーターを記述して使用。
(シェーディング済み)