android - LibGDX - 限制透视相机的缩放

标签 android camera libgdx opengl-es-2.0 perspectivecamera

在 LibGDX 中限制透视相机缩放的最佳方法是什么?我在太空中有一颗行星,我需要放大/缩小它。缩放效果很好,但我必须限制它以防止地球离用户太近而离他太远。现在,我使用标准的 CameraInputController 来放大/缩小并使用以下代码限制它:

protected boolean pinchZoom (float amount) {
    if(rho>25.f && rho<60.f){           
        return zoom(pinchZoomFactor * amount);
    }

    camera.update();
    rho = calculateRho();

    if(rho<=25.0){          
        while(rho<=25.0){
            zoom(-.1f);
            camera.update();
            rho = calculateRho();
        }           
    }

    if(rho>=60){            
        while(rho>=60.0){
            zoom(.1f);
            camera.update();
            rho = calculateRho();
        }           
    }
}

private float calculateRho(){
         return (float) Math.sqrt(Math.pow(camera.position.x, 2)+
                Math.pow(camera.position.y, 2)+Math.pow(camera.position.z, 2)); 
}

使用这段代码,我的相机有时会抖动一点。所以,我找到了另一种方法。

最佳答案

我找到了解决方案。我只是声明对输入变量 amount 求和的变量,然后我检查这个值的范围。

float currentZoom=0;
private final float maxZoom = .5f;
private final float minZoom = -2.1f;

protected boolean pinchZoom (float amount) {
    currentZoom += amount;      
    if(currentZoom>=maxZoom) currentZoom=maxZoom;
    if(currentZoom<=minZoom) currentZoom=minZoom;

    if(currentZoom>minZoom && currentZoom<maxZoom){
        return zoom(pinchZoomFactor * amount);
    }
    return false;
}

它非常适合我!我希望这个解决方案可以帮助其他人。

关于android - LibGDX - 限制透视相机的缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015216/

相关文章:

android - 无法在 ActiveAndroid 中保存空列值

Android NDK Eclipse 构建错误 : Unable to rename file. 原因:文件存在

ios - Swift UI 相机显示纵向 View ,但图像变成横向 View

ios - Spritekit (Swift) 是否允许使用两个不同的相机节点?

libgdx - 如何获得ogg的总持续时间?

java - Android onFocusChange 和 onClickListener

android - 带有复选框的 ListView 中的 IndexOutOfBoundsException

python - 查找相机矩阵的翻译

java - libGDX Sprite 表 2d 动画

java - Libgdx如何存储碰撞检测数据