09.光源の効果の利用

光源の効果を利用すると、描画されるモデルの面に陰影ができ、より立体感がでます。
08.で作成したモデルビューアに光源の効果を付加します。

解説

光源の効果を利用した描画をするためにすべきことは以下です。

  1. 光源の設定をする。
  2. 光源を有効にする。
  3. ポリゴンを、頂点の座標値に加えて、頂点の法線ベクトルも設定して描画する。

実装

プロジェクトを開く

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. マテリアルの効果の利用