libGDX - 如何在3D空间中使用指示方向的3D对象?

时间:2014-05-30 21:30:37

标签: java 3d rotation libgdx direction

我使用libGDX进行3D游戏。在此游戏中, 3D箭头应指示3D空间中的某个方向。当玩家移动时,每个帧都会更新3D箭头的方向。

我想将箭头放在方向上,相机在相机前看 3个单位,这样箭头始终可见。因此,我将摄像机方向添加到当前摄像机位置,并将其用作箭头的平移部分。通过从目标中减去箭头位置来计算方向。

所有这一切都正常,箭头显示在正确的位置,然后移动。问题是,有时指向目标,有时不指向

这是我的代码:

Vector3 targetPosition = new Vector3(1, 1, 10);
Vector3 cameraPosition = gameController.getCamera().position.cpy();
Vector3 cameraDirection = gameController.getCamera().direction.cpy();
Vector3 up = gameController.getCamera().up.cpy();

Vector3 arrowPosition = cameraDirection.scl(3).add(cameraPosition);
Vector3 arrowDirection = targetPosition.cpy();
arrowDirection = arrowDirection.sub(arrowPosition).nor();

Matrix4 transformationMatrix = new Matrix4();

// calculate orthogonal up vector
up.crs(arrowDirection).crs(arrowDirection);

arrowModel.transform = transformationMatrix.setToLookAt(arrowDirection,
    up).trn(arrowPosition);

为避免向量计算错误,添加了一些调试行:

modelBuilder.begin();
MeshPartBuilder partBuilder = modelBuilder.part("lines", GL20.GL_LINES,
    Usage.Position,
    new Material(ColorAttribute.createDiffuse(Color.GREEN)));
Vector3 linePos = arrowPosition.cpy();
partBuilder.line(linePos.cpy().add(arrowDirection), linePos);
partBuilder.line(linePos.cpy().add(up), linePos);
debugModel = new ModelInstance(modelBuilder.end());

结果,我看到向上矢量的正确绿线(相机的当前向上矢量),并且绿线正确指向我的目标,绿色立方体< / strong>即可。箭头做了其他事情:

http://www.directupload.net/file/d/3638/2ka7kvvj_jpg.htm

在图片中箭头非常接近正确的方向(绿线),还有其他情况,它指向完全错误的方向。

我使用了很多.translate,.trn,.setToLookAt和.rotate的组合,但它们都显示出类似的错误结果。

你知道这里出了什么问题吗?

0 个答案:

没有答案