【发布时间】:2015-12-17 23:37:51
【问题描述】:
我正在研究一种使用 Min3d/Rajawali 框架围绕 3D 对象旋转相机的算法。
在我的实现中,围绕 X 轴的旋转无法正常工作。我认为setLookAt() 的方法不能正常工作。
问题:
当我垂直旋转球体时,我无法完全看到它。例如,转动地球,我无法完全看到南极,因为算法将相机重置为向下。
是否可以不使用“setLookAt”方法实现相机绕物体旋转?
我尝试了不同的解决方案,但无法使其正常工作。
下面是我的代码:
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;
}
Number3d target = scene.camera.target;
Number3d cp = scene.camera.position.clone();
// move position like target is (0,0,0)
cp.x -= target.x;
cp.y -= target.y;
cp.z -= target.z;
cp.roateX(angle);
// restore offset
cp.x += target.x;
cp.y += target.y;
cp.z += target.z;
scene.camera.position.setAllFrom(cp);
【问题讨论】:
-
此堆栈交换是针对特定问题的。这个问题太笼统了。请向我们展示您的尝试以及遇到的问题。那么这里的人可以帮助你。谢谢
-
我试图实现相机围绕球体的旋转。问题是围绕 X 轴的旋转不能正常工作。我使用了这段代码:pastebin.com/g9pLa61M 我认为 setLookAt() 方法不能正常工作。
-
当我垂直旋转球体时,我无法完全看到它。例如,转动地球,我无法完全看到南极,因为算法会将相机重置。请告诉我,是否可以不使用“setLookAt”方法实现相机绕物体旋转?
标签: android rotation touch rajawali