14.頂点法線ベクトルデータを使用した描画



13.で作成したモデルビューワは、光源の効果の利用に際して面法線ベクトルデータを使用した描画を行っています。面法線ベクトルデータを使用した描画の場合、面の折れ目が目立ちます。

頂点法線ベクトルデータを使用した描画を行うと、面の折れを目を立たなくすることができます。

解説

以下を行います。

プロジェクトを開く

13.で作成したモデルビューワプロジェクトを開きます。

Modelクラスに、メンバー変数(頂点法線配列)の追加

Modelクラスに、頂点法線配列(m_vVectorVertexNormal)を追加します。
Model.h の Model クラス宣言の内容を以下のようにします。



Model.cpp の Model クラスのClear関数と イコールオペレータ関数に、頂点法線配列(m_vVectorVertexNormal)に関する処理を追加します。



ビルドし、エラー、警告がないことを確認します。

IndexedTriangleクラスに、メンバー変数(頂点法線番号)の追加

IndexedTriangleクラスに、頂点法線番号(m_ui3IndexVertexNormal)を追加します

IndexedTriangleクラスの内容を以下のようにします。



ビルドし、エラー、警告がないことを確認します。

GroupクラスのVBO作成処理の変更(頂点法線配列への対応)

GroupクラスのVBO作成処理の「面法線を計算し、頂点の法線として設定する処理」について、「頂点法線配列がある場合には、面法線を計算せず、頂点法線配列の値を設定する処理」に変更します。

Model.h の内容を以下のようにします。



ビルドし、エラー、警告がないことを確認します。

OBJファイル読み込み処理の変更(頂点法線配列への対応)

OBJファイルのファイルフォーマットは、頂点法線を扱うことができます。
13.で作成したOBJファイル読み込み処理は、頂点法線データを読み飛ばしていました。
頂点法線データを読み込むように変更します。

LoadObjFile.cpp の LoadObjFile 関数の内容を以下のようにします。



ビルドし、エラー、警告がないことを確認します。

実行

実行し、couch.objファイルを読み込み、面の折れを目が立たない描画になっているのを確認します。

couch.objファイルの読み込み
(面の折れ目が目立たない描画になっています)
(「メニュー/表示/描画」で、点、線を非描画にしています。)
(画像をクリックすると大きい画像が表示されます)


参考)13.で作成したモデルビューワで、couch.objの読み込み
(面の折れ目が目立つ描画になっています)
(「メニュー/表示/描画」で、点、線を非描画にしています。)
(画像をクリックすると大きい画像が表示されます)

ダウンロード

ソースファイルダウンロード ( ModelViewerOpenGLWinAPI2015_14_vertexnormalvector.zip )

関連ページ

前項目:13.「面はすべて同一のマテリアル設定」ではないモデルファイルの読み込みに対応する