02.トラックOpenGLレンダラクラスを作る



トラッキング(タッチ操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックOpenGLレンダラクラスを、ベースOpenGLレンダラクラスの派生クラスとして作成します。

解説

トラッキング(タッチ操作による描画領域の回転、拡大縮小、平行移動)をするためにすべきことは、以下です。

  1. GLSurfaceView.Renderインターフェースを実装したクラス(または、GLSurfaceView.Renderインターフェースを実装したクラスの派生クラス)、に、タッチのドラッグアンドドロップ量に応じて、描画空間を、回転、拡大縮小、平行移動するようにOpenGLの行列計算をする関数を作成する。また、トラッキングの開始、終了に関する関数も作成する。
  2. GLSurfaceViewの派生クラスを作成し、タッチイベント関数をオーバーライド関数として追加する。
  3. 3.で作成したタッチイベント関数に、タッチイベントの種類に応じて、1で作成した関数を呼び出す処理を記述する。
  4. メインアクティビティでは、GLSurfaceViewクラスのオブジェクトの生成を、2.で作成したGLSurfaceViewの派生クラスのオブジェクトの生成に変更する。

実装

プロジェクトを開く

01.で作成したモデルビューアプロジェクトを開きます。

トラックOpenGLレンダラクラスの作成

トラッキング(タッチ操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックOpenGLレンダラクラスを、ベースOpenGLレンダラクラスの派生クラスとして作成します。

「Project」ペインの「app > java > ドメイン.modelviewertutorial」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。


Nameに、「OpenGLTrackRenderer」、
Superclassに、「ドメイン.modelviewertutorial.OpenGLBaseRenderer」、
を入力し、「OK」ボタンを押します。

トラッキング操作の開始関数、終了関数、トラッキング操作関数の追加

OpenGLTrackRendererクラスに、トラッキング操作の開始関数、終了関数、トラッキング操作関数を追加します。

・トラッキングのモードに関する 列挙型の定義を追加します。

・トラッキングのモードに関するメンバー変数を追加します。
・トラッキング中の直前座標に関するメンバー変数を追加します。
・描画倍率に関するメンバー変数を追加します。
・描画空間のフォームを表す行列メンバー変数を追加します。
・描画中心座標に関するメンバー変数を追加します。
・行列計算で使用するテンポラリな行列メンバー変数を追加します。

・コンストラクタを追加し、必要な初期化を追加します。
・トラッキング操作の開始関数、終了関数を追加します。
・トラッキングのモードに関するアクセサ関数を追加します。
・トラッキング操作関数を追加します。
・トラッキングに対応した視野角錐台設定関数をオーバーライド関数として追加します。
・トラッキングに対応した視点座標変換関数をオーバーライド関数として追加します。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。

モデルビューアービュークラスの作成

タッチイベントに関する処理を担うモデルビューアービュークラスを作成します。

GLSurfaceViewの派生クラスとして作成します。

「Project」ペインの「app > java > ドメイン.modelviewertutorial」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。


Nameに、「ModelViewerView」、
Superclassに、「android.opengl.GLSurfaceView」、
を入力し、「OK」ボタンを押します。

モデルビューアービュークラスに、メンバー変数、コンストラクタの追加

作成したモデルビューアービュークラスに、
・Renderereメンバー変数を追加します。
・コンストラクタを追加します。
・コンストラクタに、Rendererメンバー変数の生成および、生成したRendererオブジェクトのセット処理等を追加します。
・モデルビューアービュークラスに、タッチイベント関数を追加します。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。

レイアウトの変更

メインアクティビティのレイアウトを変更します。

「Project」ペインの「app > res > layout > activity_main.xml」を開きます。

OpenGL用のViewとして設置した、GLSurfaceViewを、ModelViewerViewに変更します。

activity_main.xmlの内容を以下のようにします。

メインアクティビティクラスの変更

トラックOpenGLレンダラクラス、モデルビューアビュークラスの作成にあわせて、メインアクティビティクラスを変更します。

・GLSurfaceView型のメンバー変数を、ModelViewerView型のメンバー変数に変更。変数名もあわせて変更します。
・ModelViewerView型のメンバー変数の名前の変更を、クラス全体に適用します。
・「GLSurfaceViewの取得」の型キャストを「GLSurfaceView」から「ModelViewerView」に変更します。
・「Rendererの作成と、RendererのViewへのセット」「都度のレンダリングの設定」は、ModelViewerViewのコンストラクタで行うようにしたので、onCreate関数から削除します。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

実行

Android端末にて、動作確認。

・1つの指でドラッグすると、軸が、回転移動します。
・2つの指を揃えて(タッチ時の2つの指先の距離が300ピクセル以下で)タッチし、ドラッグすると、軸が、拡大縮小します。
・2つの指を離して(タッチ時の2つの指先の距離が300ピクセル以上で)タッチし、ピンチすると、軸が、平行移動します。

ダウンロード

サンプルプロジェクト
github.com上のダウンロードページ

関連ページ

前項目:01.ベースOpenGLレンダラクラスを作る

次項目:03.モデルOpenGLレンダラクラスを作る