我正在做一个项目,我需要在android中的opencv相机上渲染一个3D对象。我正在使用OpenGL ES rajawali进行渲染。使用下面给出的代码,它首先显示3D对象,然后打开相机。有时它会显示3D对象并同时打开相机。我不知道为什么会这样。我想在opencv相机上显示3D对象。你能帮帮我吗?
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
openCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1);
// openCvCameraView.setVisibility(mSurfaceView.VISIBLE);
openCvCameraView.setCvCameraViewListener(this);
mSurfaceView.setVisibility(openCvCameraView.VISIBLE);
mLayout.addView(openCvCameraView);
mSurfaceView.setZOrderMediaOverlay(true);
setGLBackgroundTransparent(true);
mRenderer = new Renderer(this);
mRenderer.setSurfaceView(mSurfaceView);
super.setRenderer(mRenderer);
}
答案 0 :(得分:0)
我在项目中做了类似的事情,如下面的剪辑所示:
AR Motion Detection on Android with OpenCV and OpenGL (Rajawali)
我已经为这个应用程序发布了整个项目代码,所以看一看是否有帮助。
答案 1 :(得分:0)
我假设您想要在OCV相机顶部使用透明覆盖物,对吗?
在onCreate上,创建相机和曲面视图,然后在曲面视图上设置这些参数(假设为EGL 2.0):
setEGLConfigChooser(8, 8, 8, 8, 16, 0); getHolder().setFormat(PixelFormat.TRANSLUCENT); setZOrderOnTop(true);
然后使用以下方法设置该表面的渲染器:
setRenderer(mRenderer);
这应该是你应该在OCV表面上有一个透明的覆盖层。
重要说明: Rajawali的自定义活动假定您没有使用xml文件进行布局。我强烈建议您扩展Activity而不是RajawaliActivity
答案 2 :(得分:0)
@timegalore我试图执行你的项目,但发现了一个错误 “block10_obj丢失” http://i.stack.imgur.com/uWzMU.png
答案 3 :(得分:0)
截至快照Rajawali-1.0.186,没有 RajawaliActivity ,因此无法使用setGLBackgroundTransparent(true)
但现在只需设置
mSurfaceView.setTransparent(true)
mSurfaceView
的类型为RajawaliSurfaceView