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);