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