09.光源の効果の利用
光源の効果を利用すると、描画されるモデルの面に陰影ができ、より立体感がでます。
08.で作成したモデルビューアに光源の効果を付加します。
解説
光源の効果を利用した描画をするためにすべきことは以下です。
- 光源の設定をする。
- 光源を有効にする。
- ポリゴンを、頂点の座標値に加えて、頂点の法線ベクトルも設定して描画する。
実装
プロジェクトを開く
08.で作成したモデルビューアプロジェクトを開きます。
光源設定クラスの作成
光源の設定に関するクラスを作成します。
「Project」ペインの「app > java > ドメイン.modelviewertutorial」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。
Nameに、「LightSetting」、
を入力し、「OK」ボタンを押します。
LightSettingクラスの中身を以下のようにします。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
ライトOpenGLレンダラクラスの作成
ライトに関する処理を担うライトOpenGLレンダラクラスを、ピックOpenGLレンダラクラスの派生クラスとして作成します。
パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージを右クリックし、 右クリックメニューの「新規 >
クラス」 を選択します。
Nameに、「OpenGLLightRenderer」、
Superclassに、「com.hiramine.modelviewertutorial.OpenGLPickRenderer」、
を入力し、「OK」ボタンを押します。
モデルビューアレンダラクラスの親クラスの変更
ModelViewerRendererクラスの親クラスを、OpenGLLightRenderer クラスに変更します。
ライトOpenGLレンダラクラスに、メンバー変数とコンストラクタの追加
ライトOpenGLレンダラクラスに、メンバー変数、コンストラクタを追加します。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
ライトOpenGLレンダラクラスに、光源設定関数の追加
ライトOpenGLレンダラクラスに、光源設定関数を追加します。
光源設定関数は、視点座標変換処理の途中で呼び出します。
視点座標変換をオーバラード関数として追加し、視点座標変換処理の途中で、光源設定関数を呼び出すように処理を記述します。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
モデルデータ構造クラスに、頂点法線ベクトルメンバー変数の追加
ポリゴンが光源の効果を受けるには、頂点座標値に加えて、頂点法線ベクトルが必要です。
頂点法線ベクトルに関するメンバー変数の追加します。アクセサ関数も追加します。
コンストラクタに、頂点法線ベクトルデータの構築処理を追加します。
頂点バッファオブジェクトID配列メンバー変数の要素数を1つ増やします(要素数を4にします)。
頂点法線ベクトルの頂点バッファオブジェクトのIDのゲッター関数を追加します。
VBO構築処理関数に、頂点法線ベクトルの頂点バッファオブジェクトの作成、データの転送処理を追加します。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
モデル描画関数のオーバーライド
モデルビューアレンダラクラスの描画処理を、光源の効果を利用した描画処理に変更します。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。
実行
Android端末にて、動作確認。
モデルの面の明るさに差があり、立体感があります。
ModelData01.stlファイルの読み込み
ダウンロード
サンプルプロジェクト
(github.com上のダウンロードページ)
関連ページ
前項目:08.描画の高速化(頂点バッファオブジェクトの利用)
次項目:10. マテリアルの効果の利用