java - 如何在android中使用opengl es绘制3d对象,以org.opencv.android.javacameraview作为背景

标签 java android opencv opengl-es

我想使用 org.opencv.android.javacameraview 作为 Android 手机的背景。然后我希望使用 opengl es 在其上方绘制一些增强现实 3d 模型。任何人都知道如何实现这一点。 opengl es 由 GLSurfaceView 驱动。

最佳答案

我使用 Rajawali,它是 OpenGL 的覆盖层。

http://www.rozengain.com/blog/2011/08/23/announcing-rajawali-an-opengl-es-2-0-based-3d-framework-for-android/

我强烈建议您也使用它,因为它可以减轻 OpenGL 带来的很多痛苦。不管怎样,我下面写的确实涉及一些 Rajawali 代码,但原理应该是相似的,你应该能够挑选出你需要的。如果您在这里查看我的工作成果:

http://www.youtube.com/watch?v=yEioXZT-lv0

为此,我以编程方式创建相机 View ,而不是在布局 xml 中。我必须玩一会儿,但以下内容对我有用 - 这位于您的 Activity 的 onCreate 方法中:

mOpenCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1);
    mOpenCvCameraView.setCvCameraViewListener(this);

    mLayout.addView(mOpenCvCameraView);

    mSurfaceView.setZOrderMediaOverlay(true);
    setGLBackgroundTransparent(true);
    mRenderer = new OpenGLRenderer(this);
    mRenderer.setSurfaceView(mSurfaceView);
    super.setRenderer(mRenderer);

mRenderer.setCameraPosition(0, 0, 20);

OpenGLRenderer 这里扩展了 RajawaliRenderer,而 RajawaliRenderer 又扩展了 GLSurfaceView.Renderer。可能最好查看后两者的源代码,而不是在这里重现。在我的 OpenGLRenderer 中,我在 initScene() 方法中设置了对象、相机等。我还添加了一些可以从 Activity 调用的方法来控制对象移动等。

我的 Activity 使用下面列出的该类的关键元素扩展了 RajawaliActivity:

public class RajawaliActivity extends Activity {
protected GLSurfaceView mSurfaceView;
protected FrameLayout mLayout;
protected boolean mUsesCoverageAa;
private RajawaliRenderer mRajRenderer;
protected boolean checkOpenGLVersion = true;
protected boolean mDeferGLSurfaceViewCreation = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(!mDeferGLSurfaceViewCreation)
        createSurfaceView();
}

protected void createSurfaceView()
{
    mSurfaceView = new GLSurfaceView(this);

    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

    mSurfaceView.setEGLContextClientVersion(2);

    mLayout = new FrameLayout(this);
    mLayout.addView(mSurfaceView);


    setContentView(mLayout);
}

我希望这会有所帮助 - 祝你好运!

关于java - 如何在android中使用opengl es绘制3d对象,以org.opencv.android.javacameraview作为背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721428/

相关文章:

android - 如何从 Android 相机中找到帧的轮廓并将它们转换为 box2d 主体?

java - 将数据库连接迁移到数据源时有任何问题吗?

Android facebook 图形批处理 api

java - 如何使用 writer 与使用扫描仪的用户输入

java - 无法实例化接收器,没有空构造函数

android - 想要使用 Android NDK 强制 wchar_t 成为一个无符号的短

python-3.x - 为什么不能在 OpenCV (Python) 中使用 `cv2.cv.BoxPoints`?

python - OpenCV 3.1 重映射函数类型值错误

java - 如何通过数组的特定索引将数据添加到数组列表?

java - 我如何使用 OkHttp 接收服务器响应发送的 cookie?