public static void logRotation(GVRSceneObject object) { Log.d("RotationUtil", " RotationPitch :" + object.getTransform().getRotationPitch()); Log.d("RotationUtil", " RotationRoll :" + object.getTransform().getRotationRoll()); Log.d("RotationUtil", " RotationYaw :" + object.getTransform().getRotationYaw()); Log.d("RotationUtil", " RotationW :" + object.getTransform().getRotationW()); Log.d("RotationUtil", " RotationX :" + object.getTransform().getRotationX()); Log.d("RotationUtil", " RotationY :" + object.getTransform().getRotationY()); Log.d("RotationUtil", " RotationZ :" + object.getTransform().getRotationZ()); }
public static float[] quaternionMultiply(GVRTransform quat1, GVRTransform quat2) { float[] lhs = new float[4]; lhs[0] = quat1.getRotationX(); lhs[1] = quat1.getRotationY(); lhs[2] = quat1.getRotationZ(); lhs[3] = quat1.getRotationW(); float[] rhs = new float[4]; rhs[0] = quat2.getRotationX(); rhs[1] = quat2.getRotationY(); rhs[2] = quat2.getRotationZ(); rhs[3] = quat2.getRotationW(); float[] quat = new float[4]; quat[0] = lhs[3] * rhs[0] + lhs[0] * rhs[3] + lhs[1] * rhs[2] - lhs[2] * rhs[1]; quat[1] = lhs[3] * rhs[1] + lhs[1] * rhs[3] + lhs[2] * rhs[0] - lhs[0] * rhs[2]; quat[2] = lhs[3] * rhs[2] + lhs[2] * rhs[3] + lhs[0] * rhs[1] - lhs[1] * rhs[0]; quat[3] = lhs[3] * rhs[3] - lhs[0] * rhs[0] - lhs[1] * rhs[1] - lhs[2] * rhs[2]; return quat; }
public static float[] rotateDirection(GVRTransform rotationQuat, float[] point) { float[] rotation = new float[4]; rotation[0] = rotationQuat.getRotationX(); rotation[1] = rotationQuat.getRotationY(); rotation[2] = rotationQuat.getRotationZ(); rotation[3] = rotationQuat.getRotationW(); float num = rotation[0] * 2f; float num2 = rotation[1] * 2f; float num3 = rotation[2] * 2f; float num4 = rotation[0] * num; float num5 = rotation[1] * num2; float num6 = rotation[2] * num3; float num7 = rotation[0] * num2; float num8 = rotation[0] * num3; float num9 = rotation[1] * num3; float num10 = rotation[3] * num; float num11 = rotation[3] * num2; float num12 = rotation[3] * num3; float[] result = new float[3]; result[0] = (1f - (num5 + num6)) * point[0] + (num7 - num12) * point[1] + (num8 + num11) * point[2]; result[1] = (num7 + num12) * point[0] + (1f - (num4 + num6)) * point[1] + (num9 - num10) * point[2]; result[2] = (num8 - num11) * point[0] + (num9 + num10) * point[1] + (1f - (num4 + num5)) * point[2]; return result; }
public static float getYAngleEuler(GVRSceneObject object) { // xAngle = atan2(2*y*w - 2*x*z, 1 - 2*y*y - 2*z*z) //GVRF y // yAngle = atan2(2*x*w - 2*y*z, 1 - 2*x*x - 2*z*z) //GVRF x // zAngle = asin(2*x*y + 2*z*w) //GVRF // http://www.tinkerforge.com/en/doc/Software/Bricks/IMU_Brick_CSharp.html float xq = object.getTransform().getRotationX(); float yq = object.getTransform().getRotationY(); float zq = object.getTransform().getRotationZ(); float wq = object.getTransform().getRotationW(); double yAngle = Math.atan2(2 * yq * wq - 2 * xq * zq, 1 - 2 * yq * yq - 2 * zq * zq); return (float) yAngle; }
public static void putStarReference(GVRSceneObject star) { StarPreviewInfo.star = star; evPositionX = star.getTransform().getRotationX(); evPositionY = star.getTransform().getRotationY(); evPositionZ = star.getTransform().getRotationZ(); evRotationW = star.getTransform().getRotationW(); }
public Dashboard(GVRContext gvrContext, int gVRAndroidResourceTexture) { super(gvrContext, HIGHT, WIDTH); setName(SceneObjectNames.DASHBOARD); Dashboard.currentDashboardHashCode = this.hashCode(); originalRotationX = getTransform().getRotationX(); originalRotationY = getTransform().getRotationY(); originalRotationZ = getTransform().getRotationZ(); originalRotationW = getTransform().getRotationW(); attachComponent(new GVRSphereCollider(gvrContext)); }
private void createStar() { GVRAndroidResource starMeshRes = new GVRAndroidResource(getGVRContext(), R.raw.star); GVRAndroidResource starTextRes = new GVRAndroidResource(getGVRContext(), R.drawable.star_diffuse); star = new GVRSceneObject(getGVRContext(), starMeshRes, starTextRes); star.getTransform().setPositionY(0.2f); evPositionX = star.getTransform().getRotationX(); evPositionY = star.getTransform().getRotationY(); evPositionZ = star.getTransform().getRotationZ(); evRotationW = star.getTransform().getRotationW(); addChildObject(star); }
private void scaleRotate(float rotateDelta, float scaleDelta) { GVRSceneObject selected = getSelected(); GVRTransform t = selected.getTransform(); float scale = t.getScaleX(); Quaternionf q = new Quaternionf(); Vector3f ea = new Vector3f(); float angle = rotateDelta / 10.0f; /* * rotate about Y axis */ q.set(t.getRotationX(), t.getRotationY(), t.getRotationZ(), t.getRotationW()); q.getEulerAnglesXYZ(ea); q.rotateAxis(angle, 0, 1, 0); /* * scale the model */ scale += scaleDelta / 20.0f; if (scale < 0.1f) { scale = 0.1f; } else if (scale > 50.0f) { scale = 50.0f; } t.setRotation(q.w, q.x, q.y, q.z); t.setScale(scale, scale, scale); }
private void hideCursor() { final float rotateXScene = mCurrentContainer.getTransform().getRotationX(); final float rotateYScene = mCurrentContainer.getTransform().getRotationY(); final float rotateZScene = mCurrentContainer.getTransform().getRotationZ(); final float rotateWScene = mCurrentContainer.getTransform().getRotationW(); final float rotateXCamera = getGVRContext().getMainScene().getMainCameraRig().getHeadTransform().getRotationX(); final float rotateYCamera = getGVRContext().getMainScene().getMainCameraRig().getHeadTransform().getRotationY(); final float rotateZCamera = getGVRContext().getMainScene().getMainCameraRig().getHeadTransform().getRotationZ(); final float rotateWCamera = getGVRContext().getMainScene().getMainCameraRig().getHeadTransform().getRotationW(); Quaternionf quaternionfScene = new Quaternionf(rotateXScene, rotateYScene, rotateZScene, rotateWScene); Quaternionf quaternionfCamera = new Quaternionf(rotateXCamera, rotateYCamera, rotateZCamera, rotateWCamera); quaternionfScene.difference(quaternionfCamera); if (quaternionfScene.angle() > Math.PI / 4.0f) { enableInteractiveCursor(); } else { disableInteractiveCursor(); } }
private void repositionScene() { final float rotationX = mCursorController.getCursor().getParent().getParent().getParent().getTransform().getRotationX(); final float rotationY = mCursorController.getCursor().getParent().getParent().getParent().getTransform().getRotationY(); final float rotationZ = mCursorController.getCursor().getParent().getParent().getParent().getTransform().getRotationZ(); final float rotationW = mCursorController.getCursor().getParent().getParent().getParent().getTransform().getRotationW(); Quaternionf cursorRotation = new Quaternionf(rotationX, rotationY, rotationZ, rotationW); Vector3f lookat = new Vector3f(0, 0, 1); lookat.rotate(cursorRotation); lookat = lookat.normalize(); org.gearvrf.utility.Log.d(TAG, "LookAt: " + lookat.x + ", " + lookat.y + ", " + lookat.z); Vector3f up = new Vector3f(0, 1, 0); Vector3f ownerXaxis = new Vector3f(0, 0, 0); Vector3f ownerYaxis = new Vector3f(0, 0, 0); up.cross(lookat.x, lookat.y, lookat.z, ownerXaxis); ownerXaxis = ownerXaxis.normalize(); lookat.cross(ownerXaxis.x, ownerXaxis.y, ownerXaxis.z, ownerYaxis); ownerYaxis = ownerYaxis.normalize(); float[] newModelMatrix = new float[]{ ownerXaxis.x, ownerXaxis.y, ownerXaxis.z, 0.0f, ownerYaxis.x, ownerYaxis.y, ownerYaxis.z, 0.0f, lookat.x, lookat.y, lookat.z, 0.0f, 0, 0, 0, 1.0f }; mGallery.reposition(newModelMatrix); mVideoPlayer.reposition(newModelMatrix); }