Bishamon Personal コミュニティ

Bishamon Personal コミュニティ 掲示板(仮運営中)です。

Bishamon Personal コミュニティ » Android » GLSurfaceViewでの座標系の設定について

GLSurfaceViewでの座標系の設定について

Post Reply

Page: 1

Author Post
Member
Registered: Jul 2013
Posts: 12
お世話になっております。

Android版SDKの組み込みに際して、以下のように座標系を左上原点に変更して実装を進めようとしております。2Dでの利用を想定しています。

public void onSurfaceChanged(GL10 gl, int width, int height) {

screenW = 320;
screenH = 480;

gl.glViewport(0, 0, width, height);

// Managerクラスのインスタンス
manager.ortho(0, screenW, screenH, 0, 1, -1);
manager.lookat(0, 0, 500, 0, 0, 0, 0, 1, 0);
manager.perspective((float)(60*Math.PI/180), width/(float)height, 0.1f, 1000.f);

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, screenW, screenH, 0, 1, -1);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}

onDrawFrame 内で、幾つかテクスチャの描画とエフェクトの描画を行っているのですが、実行した最初のフレームだけ想定通り(エフェクトの再生を行わない時と同等)の表示が行われますが、次のフレームからは、座標系が変動して中央が原点で描画されているかのような表示となってしまいます。

Managerクラスへの座標系の設定がうまくいっていないのではと、試行錯誤してみたものの、解決の糸口が見えず、何か心当たりでもあればと思い投稿させていただきました。

なにかヒントでもありましたら教えていただければ幸いです。
Administrator
Registered: Oct 2011
Posts: 206
Location: Tokyo
ご報告頂き有難うございます。

現在、作業が込み合っており、少々お時間を頂ければ幸いです。
Administrator
Registered: Oct 2011
Posts: 206
Location: Tokyo
こちらライブラリーはどちらを利用していますでしょうか?

onSurfaceCreated で GLES1.0 または GLES2.0 用のBISHAMONのライブラリーを選択する必要があるのですが、
System.loadLibrary("bm3es1");
  or
System.loadLibrary("bm3es2");
です。

上記サンプルでは、GL10 のラベルを利用しておりますので、GLES1.0 を選択する必要があります。
こちらの設定のご確認をお願いいたします。
Member
Registered: Jul 2013
Posts: 12
onSurfaceCreated にて、
System.loadLibrary("bm3es1");
を選択しております。
よろしくお願いいたします。
Administrator
Registered: Oct 2011
Posts: 206
Location: Tokyo
承知しました。

何かわかりましたらご連絡したいと思います。
Member
Registered: Jul 2013
Posts: 12
以下のように記述して、一応想定通りの座標系でカメラ内に描画できるようにはなりました。

public void onSurfaceChanged(GL10 gl, int width, int height) {
SymphonyLogUtil.e("onSurfaceChanged");

screenW = 320;
screenH = 480;
scale = width / screenW;

gl.glViewport(0, 0, width, height);

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, screenW, screenH, 0, 0.1f, 2.0f);
manager.ortho(0, screenW, screenH, 0, 0.1f, 2.0f);
manager.lookat(screenW/2, screenH/2, -435.0f, screenW/2, screenH/2, 0, 0, -1, 0);
manager.perspective((float)(60*Math.PI/180), width/(float)height, 0.1f, 1000.f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}

が、透視法射影になってしまっているためか、エフェクトの描画に望まない歪みが生じてしまっているようです。
正射影で指定できないか試行錯誤してみましたが、どうも物体の描画がうまくいきませんでした。正射影で指定する際に必要な処理等ありましたら、教えていただければと思います。お忙しいところ済みませんが、よろしくお願い致します。
Administrator
Registered: Oct 2011
Posts: 206
Location: Tokyo
描画ができるようになったと知り、ほっとしました。

>正射影で指定できないか試行錯誤してみましたが、どうも物体の描画がうまくいきませんでした。
>正射影で指定する際に必要な処理等ありましたら、教えていただければと思います。

正射影でのご利用は事例が少ないため、弊社側でも問題になったという報告事例がないのが現状です。
manager.orthoの指定ですが、
manager.ortho(-1, 1, -1.0f/ratio, 1.0f/ratio, 0.01f, 100.0f);
など、他の設定も試して頂けますでしょうか。

また、
common/Manager.java
にて、内部の処理はご確認頂けます。
基本的には、プロジェクションマトリクスと、GLの設定をしております。
Member
Registered: Jul 2013
Posts: 12
ご回答ありがとうございます。
改めて設定を色々試してみたところ、下記のように設定を書き換えることで、ひとまず正射影で表示できるようになりました。

gl.glOrthof(0, screenW, screenH, 0, 100.0f, -100.0f);
manager.ortho(0, screenW, screenH, 0, 100.0f, -100.0f);
manager.lookat(0, 0, 100.0f, 0, 0, 0, 0, 1, 0);
// manager.perspective((float)(60*Math.PI/180), width/(float)height, 0.1f, 1000.f);


設定値はもう少し調整してみようと思いますが、ひとまずこれにて解決とさせていただこうかと思います。
Administrator
Registered: Oct 2011
Posts: 206
Location: Tokyo
ご報告頂き誠に有難うございました。
弊社としましても、貴重な事例になりました。

今後ともBISHAMONを何卒よろしくお願いいたします。

Post Reply

Page: 1

Bishamon Personal コミュニティ » Android » GLSurfaceViewでの座標系の設定について

Bishamon Personal コミュニティ is powered by UseBB 1 Forum Software