Java Android覆盖GLSURFACHEVIEW和摄像头';s SurfaceView
我希望将openGL模型(通过GLSURFACHEVIEW)放在相机的顶部,它有自己的SURFACHEVIEW。当然这是可能的,像Layar这样的应用程序可以做到这一点 以下是我正在尝试的:Java Android覆盖GLSURFACHEVIEW和摄像头';s SurfaceView,java,android,opengl-es,Java,Android,Opengl Es,我希望将openGL模型(通过GLSURFACHEVIEW)放在相机的顶部,它有自己的SURFACHEVIEW。当然这是可能的,像Layar这样的应用程序可以做到这一点 以下是我正在尝试的: public class MainActivity extends Activity { private CameraSurfaceView mCameraSurfaceView; private GLSurfaceView mCubeGLSurfaceView; priva
public class MainActivity extends Activity {
private CameraSurfaceView mCameraSurfaceView;
private GLSurfaceView mCubeGLSurfaceView;
private FrameLayout mFrameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mFrameLayout = new FrameLayout(this);
mCameraSurfaceView = new CameraSurfaceView(this);
mCubeGLSurfaceView = new GLSurfaceView(this);
mCubeGLSurfaceView.setRenderer(new CubeRenderer());
//mCubeGLSurfaceView.setZOrderMediaOverlay(true);
mFrameLayout.addView(mCameraSurfaceView);
mFrameLayout.addView(mCubeGLSurfaceView);
setContentView(mFrameLayout);
}
}
现在:只有摄像机出现了。我在网上读到了关于GLSurfaceView的setzordermediagoverlay属性的内容;在上面的代码中设置为TRUE,则3D立方体显示为黑色背景(即不显示相机预览)
参考资料:
- 以下是我正在使用的多维数据集OpenGL代码:
- 以下是CameraSurfaceView代码:
谢谢你的帮助 由于您声明当前只有相机预览可见,因此可能是您没有正确排序视图。这就是我所做的来创造你想要的 在活动中创建 从GLSurfaceView派生的MySurfaceView实例 从SurfaceView派生的MyCameraPreview实例 在活动的onCreate方法中,我执行以下操作:
mySurfaceView = new MySurfaceView(this);
addContentView(mySurfaceView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
myCameraPreview = new MyCameraPreview(this, myCamera);
addContentView(myCameraPreview, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
请注意,使用此方法不会使用布局xml
这将创建两个相互重叠的视图,并将摄影机预览置于背景中
现在,您需要让MySurfaceView绘制一个透明的背景,以便摄影机预览将显示在渲染的对象后面。如果您使用的是OpenGL ES 2.0,请将其添加到MySurfaceView类的构造函数中
setEGLContextClientVersion(2);
setEGLConfigChooser(8,8,8,8,16,0);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
我自己刚刚完成了这个过程,所以我可能错过了一些细节。是否认为您一次只能进行一次SurfaceView?