/var/log/messages

Jan 22, 2015 - 2 minute read - Comments - android

テクスチャを読み込んでみる

諸事情により AndroidStudio にて新規にプロジェクト作成。つうか新規作成してハロワがまともに動くまで色々ハマるとか一体何。

  • build.gradle の compileSdkVersion が 21 で Java のバージョンが駄目って言われる
  • 何故か appcompat の v7 強制

特に appcompat 云々であちこちに微妙な修正入ってて厄介でした。ハロワが動いたのでテクスチャをくるくる回すまで、を色々試してみたいと思います。

順にすすめます。まず GLSurfaceView を使うところから。

とりあえず

ハロワの TextView のソレを GLSurfaceView にして起動してみるに落ちる。どうも GLSurfaceView を継承したクラスを作って

public class MyGLSurfaceView extends GLSurfaceView {
    public MyGLSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

みたいなコンストラクタをこさえないと、らしいです。ただ、サンプルにあるように GLSurfaceView のオブジェクト作って SetContentView でも ActionBar はそのままだったのでどちらでも良いみたいなのかどうか。

とりあえず背景をグラデにしたいみたいなんスけどとりあえずスルー。三角形を描画したりしつつリソースから Bitmap を取り出してテクスチャにして描画してみます。

テクスチャ描画

その行為自体は本に書いてある通り、で問題なかったのですが元になってる素材が一応マルチデバイスな形になっててどうすりゃ良いのか困りましたが、試行錯誤している内に使ってるモノ自体は背景透過な素材だったので絵の部分はそのまま使って背景部分の大きさを 2 の階乗にしてやれば良い事が分かりました。

Gimp 使ってペーストしたら真ん中に貼り付けられて本当にアンタは賢い子だよ (誰

ので、基本的に

  • 全体の大きさは 2 の階乗なサイズ (使う素材の最大サイズが入る程度)
  • ピクセル密度毎の素材はコピーして tranceparent な背景に張る

って形で素材は作れてマルチデバイスにも対応できることが分かりました。

そして回転

複数のテクスチャの描画もできたので貼り付けてある一つを回してみようとしているのですが両方一緒に回転する上に画像が歪みます。色々試してみているのですが上手くいきません。とほほ。

歪み補正

回転させる時、以下のようにすれば良かったみたい。

    final float aspect = (float)screenWidth / (float)screenHeight;

    {
        gl10.glScalef(1.0f / aspect, 1.0f, 1.0f);
        gl10.glRotatef(angle, 0f, 0f, 1f);
        gl10.glScalef(aspect / 1.0f, 1.0f, 1.0f);
    }

なんというか第六感orz

ただ、二つテクスチャを扱ってて片方だけぐるぐる回したいのですが、現状では両方一緒にぐるぐる回ってしまっています。

現状確認できてるのは

  • 回転させてる方のテクスチャの処理を glPushMatrix, glPopMatrix で囲むと回転が止まる

だったのですが

  • 回転させないテクスチャの描画では push と pop して
  • 回転させないテクスチャの描画時には glLoadIdentity する

という事で片方は動いて片方は動かない、というソレが実現できました。むむむ。