blob: 5d6ec097b85f662476b3ec4998212b3ea6661972 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_MATH_H_
#define CHROME_BROWSER_ANDROID_VR_SHELL_VR_MATH_H_
#include <string>
#include "third_party/gvr-android-sdk/src/ndk-beta/include/vr/gvr/capi/include/gvr_types.h"
namespace vr_shell {
// 2D rectangles. Unlike gvr::Rectf and gvr::Recti, these have width and height
// rather than right and top.
typedef struct Recti {
int x;
int y;
int width;
int height;
} Recti;
typedef struct Rectf {
float x;
float y;
float width;
float height;
} Rectf;
typedef struct RotationAxisAngle {
float x;
float y;
float z;
float angle;
} RotationAxisAngle;
void SetIdentityM(gvr::Mat4f& mat);
void TranslateM(gvr::Mat4f& tmat, gvr::Mat4f& mat, float x, float y, float z);
void TranslateMRight(gvr::Mat4f& tmat,
gvr::Mat4f& mat,
float x,
float y,
float z);
void ScaleM(gvr::Mat4f& tmat, const gvr::Mat4f& mat, float x, float y, float z);
void ScaleMRight(gvr::Mat4f& tmat, const gvr::Mat4f& mat,
float x, float y, float z);
// Util functions that are copied from the treasure_hunt NDK demo in
// third_party/gvr-andoir-sdk/ folder.
gvr::Mat4f MatrixTranspose(const gvr::Mat4f& mat);
std::array<float, 4> MatrixVectorMul(const gvr::Mat4f& matrix,
const std::array<float, 4>& vec);
std::array<float, 3> MatrixVectorMul(const gvr::Mat4f& matrix,
const std::array<float, 3>& vec);
gvr::Vec3f MatrixVectorMul(const gvr::Mat4f& m, const gvr::Vec3f& v);
gvr::Vec3f MatrixVectorRotate(const gvr::Mat4f& m, const gvr::Vec3f& v);
gvr::Mat4f MatrixMul(const gvr::Mat4f& matrix1, const gvr::Mat4f& matrix2);
gvr::Mat4f PerspectiveMatrixFromView(const gvr::Rectf& fov,
float z_near,
float z_far);
// Provides the direction the head is looking towards as a 3x1 unit vector.
gvr::Vec3f getForwardVector(const gvr::Mat4f& matrix);
// Provides the relative translation of the head as a 3x1 vector.
gvr::Vec3f getTranslation(const gvr::Mat4f& matrix);
gvr::Quatf QuatMultiply(const gvr::Quatf& a, const gvr::Quatf& b);
gvr::Mat4f QuatToMatrix(const gvr::Quatf& quat);
float VectorLength(const gvr::Vec3f& vec);
void NormalizeVector(gvr::Vec3f& vec);
float VectorDot(const gvr::Vec3f& a, const gvr::Vec3f& b);
void NormalizeQuat(gvr::Quatf& quat);
gvr::Quatf QuatFromAxisAngle(float x, float y, float z, float angle);
gvr::Vec3f GetRayPoint(const gvr::Vec3f& rayOrigin,
const gvr::Vec3f& rayVector,
float scale);
} // namespace vr_shell
#endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_MATH_H_