如何在libgdxjava中拖动三维对象?

如何在libgdxjava中拖动三维对象?,java,android,3d,libgdx,Java,Android,3d,Libgdx,我试图通过调用覆盖touchdrable函数来拖动三维立方体。我已经找到了如何在XZ平面上拖动对象,但我不知道如何在3D中拖动对象 @Override public boolean touchDragged(int screenX, int screenY, int pointer) { if (selecting < 0) return false; if (selected == selecting) { Ray ray = cam.ge

我试图通过调用覆盖touchdrable函数来拖动三维立方体。我已经找到了如何在XZ平面上拖动对象,但我不知道如何在3D中拖动对象

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
    if (selecting < 0)
        return false;
    if (selected == selecting) {
        Ray ray = cam.getPickRay(screenX, screenY);
        final float distanceY = -ray.origin.y / ray.direction.y;
        final float distanceX = -ray.origin.x / ray.direction.x;
        final float distanceZ = -ray.origin.z / ray.direction.z;
        final float distance;
        if (oldRay!=null){
            float absDifferenceX = Math.abs(ray.direction.x-oldRay.direction.x);
            float absDifferenceY = Math.abs(ray.direction.y-oldRay.direction.y);
            float absDifferenceZ = Math.abs(ray.direction.z-oldRay.direction.z);
            float minAbsDifference =  Math.min(Math.min(absDifferenceX,absDifferenceY),absDifferenceZ);
            if (minAbsDifference == absDifferenceX ){
                distance = distanceX;
            }else if (minAbsDifference == absDifferenceY){
                distance = distanceY;
            }else{
                distance = distanceZ;
            }
        }else{
            distance = (distanceX+distanceY+distanceZ)/3.0f;
        }

        position.set(ray.direction).scl(distance).add(ray.origin);
        objects.get(selected).transform.setTranslation(position);
        oldRay = ray;
    }

    return true;
}
@覆盖
公共布尔值(int-screenX、int-screenY、int-pointer){
如果(选择<0)
返回false;
如果(已选择==正在选择){
射线=cam.getPickRay(screenX,screenY);
最终浮点距离y=-ray.origin.y/ray.direction.y;
最终浮点距离x=-ray.origin.x/ray.direction.x;
最终浮点距离z=-ray.origin.z/ray.direction.z;
最终浮动距离;
if(oldRay!=null){
float abs differencex=Math.abs(光线方向x-oldRay方向x);
float abs differencey=Math.abs(ray.direction.y-oldRay.direction.y);
float abs differencez=Math.abs(ray.direction.z-oldRay.direction.z);
float minAbsDifference=Math.min(Math.min(absDifferenceX,absDifferenceY),absDifferenceZ);
if(minAbsDifference==absDifferenceX){
距离=距离x;
}else if(minAbsDifference==absDifferenceY){
距离=距离;
}否则{
距离=距离Z;
}
}否则{
距离=(距离X+距离Y+距离Z)/3.0f;
}
位置。设置(光线方向)。scl(距离)。添加(光线原点);
objects.get(selected).transform.setTranslation(position);
oldRay=射线;
}
返回true;
}