gpt4 book ai didi

java - Android min3D 使用触摸围绕对象旋转

转载 作者:太空狗 更新时间:2023-10-29 14:29:00 25 4
gpt4 key购买 nike

我正在尝试使用触摸屏围绕某个物体旋转相机。围绕 Y 轴的旋转工作正常(X 轴被禁用)。绕 X 轴旋转真的很奇怪。当对象(它是火箭)变得更高时 rocket.position().y++ & scene.camera().position.y++,围绕 x 轴的旋转变得更大和奇怪。如果火箭停止 rocket.position().y = 500; & scene.camera().position.y = 500;,我不能绕 x 轴旋转,而是放大或缩小对象。两个轴都启用了,这太奇怪了。

initScene 中,我将相机设置为注视火箭的中心。

这是我的代码:

initScene:
scene.camera().position.z = 90;
scene.camera().target = raketeOBJ.position();

onTouchEvent:
public boolean onTouchEvent(MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN) {
xpos = me.getX();
ypos = me.getY();
return true;
}

if (me.getAction() == MotionEvent.ACTION_UP) {
xpos = -1;
ypos = -1;
touchTurn = 0;
touchTurnUp = 0;
return true;
}

if (me.getAction() == MotionEvent.ACTION_MOVE) {
float xd = me.getX() - xpos;
float yd = me.getY() - ypos;

xpos = me.getX();
ypos = me.getY();

touchTurn = xd / -200f;
touchTurnUp = yd / -200f;
return true;
}

try {
Thread.sleep(15);
} catch (Exception e) {

}

return super.onTouchEvent(me);
}

UpdateScene:

if (touchTurn != 0) {
scene.camera().position.rotateY(touchTurn);
touchTurn = 0;
}

if (touchTurnUp != 0) {
scene.camera().position.rotateX(touchTurnUp);
touchTurnUp = 0;
}

最佳答案

我认为这是一个 View 方向问题。尝试基本的 android opengl 示例“旋转立方体”,我认为这是类似的行为。

为避免这种情况,您必须将显示坐标转换为 min3D 对象旋转坐标。

考虑将您的手指在显示器上向左移动 1 厘米,3D 对象跟随您的手指。这意味着 x_display = x_object。如果旋转对象,显示和对象之间仍然存在固定连接。(x_display = - 1cm) 等于 (x_object = -1cm)
在 90° 和 270° 时,您的物体将移动 xy-inverted,在 180° 时,您的物体将移动 x-inverted。

使用一些 sin/cos 来克服这个问题。

编辑:还有 rotationangle (object) = - rotationangle (camera)

关于java - Android min3D 使用触摸围绕对象旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8714365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com