我们使用 HTC Evo 3D,我们试图在自动立体模式下在相机的自动立体绘制预览图像上获得 3D 叠加层(使用 OpenGL ES 绘制的立方体),但我们无法让它工作。我们可以做的是拥有相机视图(2D 或 3D),或者我们可以让 OpenGL 立方体处于 3D 模式,但是当我们尝试将两者结合起来时,整个设备都会冻结(使用“ W/SharedBufferStack(11043) : waitForCondition(LockCondition) 超时(身份=425,状态=0)。CPU 可能被锁定。再试一次。 “)或者我们只看到相机图像但没有覆盖。
对于冻结的问题,我们已经在网上阅读了一些信息,似乎除了修补内核之外没有真正的解决方案,因此我们目前专注于另一个问题。所以我们所拥有的是一个S3DGLSurfaceView
可以扩展的GLSurfaceView
,我们通过调用来启用 3D 支持
Surface surface = holder.getSurface();
formatResult = DisplaySetting.setStereoscopic3DFormat(surface,
DisplaySetting.STEREOSCOPIC_3D_FORMAT_SIDE_BY_SIDE);
在这个视图上我们绘制我们的立方体(当我们只将这个视图添加到我们的活动时,它工作得很好)。但是,我们还有一个CameraPreview
对象,它封装了一个Surfaceview
我们通过调用给立体相机的对象
camera = Camera.open(CAMERA_STEREOSCOPIC);
camera.setPreviewDisplay(holder);
preview.getHolder()
持有人的存储位置preview
是我们的SurfaceView
。对于活动本身,我们使用 a RelativeLayout
,首先添加相机预览,然后添加 OpenGL 表面 - 我们也尝试了相反的方法,但这并没有改变任何东西。我们也尝试过使用 z 顺序,但这也没有效果。
目前,我们的想法是不可能有两个视图都启用了自动立体模式(自动启用它的相机预览和我们手动启用它的 OpenGL 表面),但我们希望这是错误的,我们想念别的东西。
如果有人能告诉我们如何在 3D 相机图像上进行 3D 叠加,那就太好了——无论是在自动立体模式下。