我正在做一个项目,我需要在安卓的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);
}
我在项目中做了一些非常相似的事情,如以下剪辑所示:
Android 上的 AR 运动检测与 OpenCV 和 OpenGL (Rajawali)
我已经发布了这个应用程序的整个项目代码,所以看看是否有帮助。
您将在此处找到代码:https://github.com/timegalore/MotionDetectionAR
我假设你想要在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
@timegalore 我试图执行您的项目但发现错误"block10_obj不见了"https://i.stack.imgur.com/uWzMU.png
截至快照 Rajawali-1.0.186 没有 RajawaliActive,因此无法使用setGLBackgroundTransparent(true)
但是现在,您只需通过设置
mSurfaceView.setTransparent(true)
其中mSurfaceView
属于类型 RajawaliSurfaceView