2011年5月19日木曜日

ARの前にカメラのプレビュー画像とOpenGLの画像を重ねてみた


カメラ用のSurfaceView作って、FrameLayoutでOpenGLのViewと重ねるだけじゃん? って思ってたら結構はまりました。

いろんなところですでに言われてますが、

①普通に考えるとカメラの画像にOpenGLを重ねるので、
カメラビューの追加 → OpenGLビューの追加
となると思いきや、
OpenGLビューの追加 → カメラビューの追加
にしないといけない罠
  1. public void onCreate(Bundle savedInstanceState) {  
  2.  super.onCreate(savedInstanceState);  
  3.  FrameLayout layout = new FrameLayout(this);  
  4.  setContentView(layout);    
  5.  layout.addView(new GameView(thisnew OpeningScene(), 640480));  
  6.  layout.addView(new CameraSurfaceView(this));  
  7. }  

②OpenGLの方のピクセルフォーマットを透過にしなければいけない罠+ChoosConfigの時にEGL_ALPHA_SIZEを指定しないと機種によっては表示がバグる罠。
※でもなんか、PixelFormat.RGBA_8888でも大丈夫だった、うん?
  1. getHolder().setFormat(PixelFormat.RGBA_8888);  
  2. getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU);  
  3. getHolder().addCallback(this);  
  1. int[] spec = {  
  2.  EGL10.EGL_ALPHA_SIZE,1,  
  3.  EGL10.EGL_DEPTH_SIZE,1,  
  4.  EGL10.EGL_NONE  
  5. };   
  6. EGLConfig[] configs = new EGLConfig[1];  
  7. egl.eglChooseConfig(display, spec, configs, 1new int[1]);  

③glClearColorのアルファの指定を1以外にしないとカメラビューが映らない罠
  1. public static void clear() {    
  2.  Global.gl.glClearColor(1,1,1,0);  
  3.  Global.gl.glEnable(GL10.GL_DEPTH_TEST);  
  4.  Global.gl.glDepthMask(true); // 深度バッファ書き込み有効  
  5.  Global.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  
  6. }  

ARとか程遠い。

0 件のコメント:

コメントを投稿