09.光源の効果の利用
(開発環境として「Eclipse」を使用した、古い情報です。
     開発環境として「Android Studio」を使用した、新しい情報は、
     「ホーム > プログラミング > モデルビューアを作る ( Android + OpenGL ES 1.0/1.1 ) ( Android Studio 2.3.3 版 )」)

光源の効果を利用すると、描画されるモデルの面に陰影ができ、より立体感がでます。
    08.で作成したモデルビューアに光源の効果を付加します。
    
使用開発環境は、Eclipse 3.7.2 ベースの Pleiades です。
解説
光源の効果を利用した描画をするためにすべきことは以下です。
- 光源の設定をする。
- 光源を有効にする。
- ポリゴンを、頂点の座標値に加えて、頂点の法線ベクトルも設定して描画する。
実装
プロジェクトを開く
08.で作成したモデルビューアプロジェクトを開きます。
光源設定クラスの作成
光源の設定に関するクラスを作成します。
    
    パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージを右クリックし、 右クリックメニューの「新規 > クラス」 を選択します。
    
    
    名前 にクラス名「LightSetting」、
    を入力し、「完了」ボタンを押します。
    
    LightSettingクラスの中身を以下のようにします。
    
    
ライトOpenGLレンダラクラスの作成
ライトに関する処理を担うライトOpenGLレンダラクラスを、ピックOpenGLレンダラクラスの派生クラスとして作成します。
    
    パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージを右クリックし、 右クリックメニューの「新規 >
    クラス」 を選択します。
    
    
    名前 にクラス名「OpenGLLightRenderer」、
    スーパークラスに、「OpenGLPickRenderer」、
    を入力し、「完了」ボタンを押します。
モデルビューアレンダラクラスの親クラスの修正
ModelViewerRendererクラスの親クラスを、OpenGLLightRendererクラスに変更します。
    
    
ライトOpenGLレンダラクラスに、メンバ変数とコンストラクタの追加
ライトOpenGLレンダラクラスに、メンバ変数、コンストラクタを追加します。
    
    
ライトOpenGLレンダラクラスに、光源設定関数の追加
ライトOpenGLレンダラクラスに、光源設定関数を追加します。
    
    光源設定関数は、視点座標変換処理の途中で呼び出します。
    視点座標変換をオーバラード関数として追加し、視点座標変換処理の途中で、光源設定関数を呼び出すように処理を記述します。
    
    
モデルデータ構造クラスに、頂点法線ベクトルメンバ変数の追加
ポリゴンが光源の効果を受けるには、頂点座標値に加えて、頂点法線ベクトルが必要です。
    
    頂点法線ベクトルに関するメンバ変数の追加します。アクセサ関数も追加します。
    コンストラクタに、頂点法線ベクトルデータの構築処理を追加します。
    
    頂点バッファオブジェクトID配列メンバ変数の要素数を1つ増やします。
    頂点法線ベクトルの頂点バッファオブジェクトのIDのゲッター関数を追加します。
    VBO構築処理関数に、頂点法線ベクトルの頂点バッファオブジェクトの作成、データの転送処理を追加します。
    
    
モデル描画関数のオーバーライド
モデルビューアレンダラクラスの描画処理を、光源の効果を利用した描画処理に変更します。
    
    
実行
Android Virtual Device にて、動作確認。
    
    ※ ターゲット:「Android 4.0.3 - API Level 15」、ハードウェア:「GPU emulation」をyes、として作成したAndroid
    Virtual Device にて動作確認。
    
実行し、07.で作成したモデルビューアと、描画速度を比較します。
    
    モデルの面の明るさに差があり、立体感があります。
    
ModelData01.stlファイルの読み込み
    
ダウンロード
サンプルプロジェクト
    
    サンプルモデル(ModelData01.stl)
関連ページ
前項目:08.描画の高速化(頂点バッファオブジェクトの利用)
    
    次項目:10. マテリアルの効果の利用

