09.光源の効果の利用

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

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

使用開発環境は、Eclipse 3.7.2 ベースの Pleiades です。

解説

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

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

実装

プロジェクトを開く

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