public ArcballCamera(Context context, View view, Object3D target) { super(); mContext = context; mTarget = target; mView = view; initialize(); addListeners(); }
private void updateRotation(final float x, final float y) { mapToScreen(x, y, mCurrScreenCoord); applyRotation(); }
@Override public boolean onScale(ScaleGestureDetector detector) { double fov = Math.max(30, Math.min(100, mStartFOV * (1.0 / detector.getScaleFactor()))); setFieldOfView(fov); return true; }
public void setTarget(Object3D target) { mTarget = target; setLookAt(mTarget.getPosition()); }
private void startRotation(final float x, final float y) { mapToScreen(x, y, mPrevScreenCoord); mCurrScreenCoord.setAll(mPrevScreenCoord.getX(), mPrevScreenCoord.getY()); mIsRotating = true; }
private void applyRotation() { if (mIsRotating) { mapToSphere((float) mPrevScreenCoord.getX(), (float) mPrevScreenCoord.getY(), mPrevSphereCoord); mapToSphere((float) mCurrScreenCoord.getX(), (float) mCurrScreenCoord.getY(), mCurrSphereCoord); Vector3 rotationAxis = mPrevSphereCoord.clone(); rotationAxis.cross(mCurrSphereCoord); rotationAxis.normalize(); double rotationAngle = Math.acos(Math.min(1, mPrevSphereCoord.dot(mCurrSphereCoord))); mCurrentOrientation.fromAngleAxis(rotationAxis, MathUtil.radiansToDegrees(rotationAngle)); mCurrentOrientation.normalize(); Quaternion q = new Quaternion(mStartOrientation); q.multiply(mCurrentOrientation); mEmpty.setOrientation(q); } }
@Override public void resetCameraOrientation() { super.resetCameraOrientation(); mEmpty.setOrientation(Quaternion.getIdentity()); getViewMatrix(); }
private void initialize() { mStartFOV = mFieldOfView; mLookAtEnabled = true; setLookAt(0, 0, 0); mEmpty = new Object3D(); mScratchMatrix = new Matrix4(); mScratchVector = new Vector3(); mCameraStartPos = new Vector3(); mPrevSphereCoord = new Vector3(); mCurrSphereCoord = new Vector3(); mPrevScreenCoord = new Vector2(); mCurrScreenCoord = new Vector2(); mStartOrientation = new Quaternion(); mCurrentOrientation = new Quaternion(); }
private void startRotation(final float x, final float y) { mapToScreen(x, y, mPrevScreenCoord); mCurrScreenCoord.setAll(mPrevScreenCoord.getX(), mPrevScreenCoord.getY()); mIsRotating = true; }
private void applyRotation() { if (mIsRotating) { mapToSphere((float) mPrevScreenCoord.getX(), (float) mPrevScreenCoord.getY(), mPrevSphereCoord); mapToSphere((float) mCurrScreenCoord.getX(), (float) mCurrScreenCoord.getY(), mCurrSphereCoord); Vector3 rotationAxis = mPrevSphereCoord.clone(); rotationAxis.cross(mCurrSphereCoord); rotationAxis.normalize(); double rotationAngle = Math.acos(Math.min(1, mPrevSphereCoord.dot(mCurrSphereCoord))); mCurrentOrientation.fromAngleAxis(rotationAxis, MathUtil.radiansToDegrees(rotationAngle)); mCurrentOrientation.normalize(); Quaternion q = new Quaternion(mStartOrientation); q.multiply(mCurrentOrientation); mEmpty.setOrientation(q); } }
public ArcballCamera(Context context, View view, Object3D target) { super(); mContext = context; mTarget = target; mView = view; initialize(); addListeners(); }
private void updateRotation(final float x, final float y) { mapToScreen(x, y, mCurrScreenCoord); applyRotation(); }
public void setTarget(Object3D target) { mTarget = target; setLookAt(mTarget.getPosition()); }
@Override public boolean onScale(ScaleGestureDetector detector) { double fov = Math.max(30, Math.min(100, mStartFOV * (1.0 / detector.getScaleFactor()))); setFieldOfView(fov); return true; }
private void initialize() { mStartFOV = mFieldOfView; mLookAtEnabled = true; setLookAt(0, 0, 0); mEmpty = new Object3D(); mScratchMatrix = new Matrix4(); mScratchVector = new Vector3(); mCameraStartPos = new Vector3(); mPrevSphereCoord = new Vector3(); mCurrSphereCoord = new Vector3(); mPrevScreenCoord = new Vector2(); mCurrScreenCoord = new Vector2(); mStartOrientation = new Quaternion(); mCurrentOrientation = new Quaternion(); }