カメラ用のSurfaceView作って、FrameLayoutでOpenGLのViewと重ねるだけじゃん? って思ってたら結構はまりました。
いろんなところですでに言われてますが、
①普通に考えるとカメラの画像にOpenGLを重ねるので、
カメラビューの追加 → OpenGLビューの追加
となると思いきや、
OpenGLビューの追加 → カメラビューの追加
にしないといけない罠
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- FrameLayout layout = new FrameLayout(this);
- setContentView(layout);
- layout.addView(new GameView(this, new OpeningScene(), 640, 480));
- layout.addView(new CameraSurfaceView(this));
- }
②OpenGLの方のピクセルフォーマットを透過にしなければいけない罠+ChoosConfigの時にEGL_ALPHA_SIZEを指定しないと機種によっては表示がバグる罠。
※でもなんか、PixelFormat.RGBA_8888でも大丈夫だった、うん?
- getHolder().setFormat(PixelFormat.RGBA_8888);
- getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU);
- getHolder().addCallback(this);
- int[] spec = {
- EGL10.EGL_ALPHA_SIZE,1,
- EGL10.EGL_DEPTH_SIZE,1,
- EGL10.EGL_NONE
- };
- EGLConfig[] configs = new EGLConfig[1];
- egl.eglChooseConfig(display, spec, configs, 1, new int[1]);
③glClearColorのアルファの指定を1以外にしないとカメラビューが映らない罠
- public static void clear() {
- Global.gl.glClearColor(1,1,1,0);
- Global.gl.glEnable(GL10.GL_DEPTH_TEST);
- Global.gl.glDepthMask(true); // 深度バッファ書き込み有効
- Global.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
- }
ARとか程遠い。
0 件のコメント:
コメントを投稿