| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.testapp; |
| |
| import android.util.Log; |
| import android.renderscript.Float3; |
| import com.android.scenegraph.*; |
| import com.android.scenegraph.CompoundTransform.RotateComponent; |
| import com.android.scenegraph.CompoundTransform.TranslateComponent; |
| |
| public class TouchHandler { |
| private static String TAG = "TouchHandler"; |
| |
| float mLastX; |
| float mLastY; |
| |
| float mRotateXValue; |
| float mRotateYValue; |
| Float3 mDistValue; |
| Float3 mPosValue; |
| |
| CompoundTransform mCameraRig; |
| RotateComponent mRotateX; |
| RotateComponent mRotateY; |
| TranslateComponent mDist; |
| TranslateComponent mPosition; |
| Camera mCamera; |
| |
| public void init(Scene scene) { |
| // Some initial values for camera position |
| mRotateXValue = -20; |
| mRotateYValue = 0; |
| mDistValue = new Float3(0, 0, 45); |
| mPosValue = new Float3(0, 4, 0); |
| |
| // Make a camera transform we can manipulate |
| mCameraRig = scene.appendNewCompoundTransform(); |
| mCameraRig.setName("CameraRig"); |
| |
| mPosition = mCameraRig.addTranslate("Position", mPosValue); |
| mRotateY = mCameraRig.addRotate("RotateY", new Float3(0, 1, 0), mRotateYValue); |
| mRotateX = mCameraRig.addRotate("RotateX", new Float3(1, 0, 0), mRotateXValue); |
| mDist = mCameraRig.addTranslate("Distance", mDistValue); |
| |
| mCamera = scene.appendNewCamera(); |
| mCamera.setTransform(mCameraRig); |
| } |
| |
| public Camera getCamera() { |
| return mCamera; |
| } |
| |
| public void onActionDown(float x, float y) { |
| mLastX = x; |
| mLastY = y; |
| } |
| |
| public void onActionScale(float scale) { |
| if (mDist == null) { |
| return; |
| } |
| mDistValue.z *= 1.0f / scale; |
| mDistValue.z = Math.max(10.0f, Math.min(mDistValue.z, 150.0f)); |
| mDist.setValue(mDistValue); |
| } |
| |
| public void onActionMove(float x, float y) { |
| if (mRotateX == null) { |
| return; |
| } |
| |
| float dx = mLastX - x; |
| float dy = mLastY - y; |
| |
| if (Math.abs(dy) <= 2.0f) { |
| dy = 0.0f; |
| } |
| if (Math.abs(dx) <= 2.0f) { |
| dx = 0.0f; |
| } |
| |
| mRotateYValue += dx * 0.25f; |
| mRotateYValue %= 360.0f; |
| |
| mRotateXValue += dy * 0.25f; |
| mRotateXValue = Math.max(mRotateXValue , -80.0f); |
| mRotateXValue = Math.min(mRotateXValue , 0.0f); |
| |
| mRotateX.setAngle(mRotateXValue); |
| mRotateY.setAngle(mRotateYValue); |
| |
| mLastX = x; |
| mLastY = y; |
| } |
| } |