You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX+ARCore多相机与视口问题:分屏渲染区域限制

解决LibGDX + ARCore横屏分屏渲染(左侧AR相机视角)的问题

要实现左侧渲染ARCore控制的透视相机场景,核心是通过LibGDX的视口(Viewport)系统约束渲染区域,同时适配ARCore生成的相机矩阵。下面是具体的实现步骤和代码示例:

1. 理解需求对应视口逻辑

你需要的是:

  • 左侧区域占物理屏幕的左半宽度(屏幕宽度/2)
  • 原全屏相机的x轴中点(AR场景的视觉中心)对应物理屏幕的1/4位置——这正好是左半屏的中心,所以只需要让AR相机的渲染范围被限制在左半屏即可。

2. 创建并配置左侧视口

LibGDX的PerspectiveViewport专门适配透视相机,我们可以用它来定义左侧的渲染区域:

// 初始化阶段定义视口
private PerspectiveViewport leftARViewport;
private PerspectiveCamera arCamera; // 你的ARCore绑定的LibGDX相机

// 在create()或resize()中初始化视口
@Override
public void resize(int width, int height) {
    // 左侧视口宽度为屏幕的一半,高度和屏幕一致
    int leftScreenWidth = width / 2;
    // 视口的视场角可以用ARCore相机的实际FOV,或者保持你原有的相机参数
    leftARViewport = new PerspectiveViewport(arCamera.fieldOfView, leftScreenWidth, height);
    // 将AR相机绑定到这个视口
    leftARViewport.setCamera(arCamera);
    // 设置视口在屏幕上的位置:从(0,0)开始,宽度leftScreenWidth,高度height
    leftARViewport.setScreenBounds(0, 0, leftScreenWidth, height);
}

3. 结合ARCore相机矩阵设置与视口应用

在渲染循环中,先完成ARCore相机矩阵的同步,再应用左侧视口,这样渲染内容就会被限制在左半屏:

@Override
public void render(float delta) {
    // 1. 处理ARFrame,同步ARCore相机到LibGDX相机(你的原有代码)
    Frame frame = arSession.update();
    Camera arCoreCamera = frame.getCamera();
    float vm[] = new float[16];
    
    arCoreCamera.getProjectionMatrix(vm, 0, arCamera.near, arCamera.far);
    arCamera.projection.set(vm);
    
    arCoreCamera.getViewMatrix(vm, 0);
    arCamera.view.set(vm);
    
    arCamera.combined.set(arCamera.projection);
    Matrix4.mul(arCamera.combined.val, arCamera.view.val);

    // 2. 应用左侧视口:这一步会告诉GL只在左半屏区域渲染
    leftARViewport.apply();
    
    // 3. 渲染AR场景(比如用ModelBatch渲染AR物体)
    modelBatch.begin(arCamera);
    // 渲染你的AR模型、锚点等内容
    modelBatch.render(arRenderables);
    modelBatch.end();

    // ------------------------------
    // 后续可以处理右侧相机的视口和渲染
    // rightViewport.apply();
    // 渲染右侧场景
    // ------------------------------
}

关键注意事项

  • 视口的时机:必须在渲染AR场景前调用leftARViewport.apply(),确保GL的裁剪区域被设置为左半屏。
  • AR背景对齐:你已经实现了摄像头背景的分屏,这个视口设置会让AR渲染内容和左半屏的背景完美对齐,因为视口的坐标和背景的分屏区域一致。
  • resize适配:一定要在resize()方法中更新视口的尺寸,避免屏幕旋转或尺寸变化时渲染区域错位。

这样设置后,ARCore控制的透视相机场景就会被限制在屏幕左侧,且原全屏的x轴中点会正好落在物理屏幕的1/4位置(左半屏的中心),完全符合你的需求。

内容的提问来源于stack exchange,提问作者mbauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:54:53