зеркало из https://github.com/AvaloniaUI/angle.git
63 строки
2.0 KiB
C
63 строки
2.0 KiB
C
//
|
|
// Copyright 2014 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Matrix:
|
|
// Helper class for doing matrix math.
|
|
//
|
|
|
|
#ifndef UTIL_MATRIX_H
|
|
#define UTIL_MATRIX_H
|
|
|
|
#include "common/vector_utils.h"
|
|
#include "util/util_export.h"
|
|
|
|
struct ANGLE_UTIL_EXPORT Matrix4
|
|
{
|
|
float data[16];
|
|
|
|
Matrix4();
|
|
Matrix4(float m00,
|
|
float m01,
|
|
float m02,
|
|
float m03,
|
|
float m10,
|
|
float m11,
|
|
float m12,
|
|
float m13,
|
|
float m20,
|
|
float m21,
|
|
float m22,
|
|
float m23,
|
|
float m30,
|
|
float m31,
|
|
float m32,
|
|
float m33);
|
|
|
|
static Matrix4 identity();
|
|
static Matrix4 rotate(float angle, const angle::Vector3 &p);
|
|
static Matrix4 translate(const angle::Vector3 &t);
|
|
static Matrix4 scale(const angle::Vector3 &s);
|
|
static Matrix4 frustum(float l, float r, float b, float t, float n, float f);
|
|
static Matrix4 perspective(float fov, float aspectRatio, float n, float f);
|
|
static Matrix4 ortho(float l, float r, float b, float t, float n, float f);
|
|
static Matrix4 rollPitchYaw(float roll, float pitch, float yaw);
|
|
|
|
static Matrix4 invert(const Matrix4 &mat);
|
|
static Matrix4 transpose(const Matrix4 &mat);
|
|
static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector3 &pt);
|
|
static angle::Vector3 transform(const Matrix4 &mat, const angle::Vector4 &pt);
|
|
};
|
|
|
|
ANGLE_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, const Matrix4 &b);
|
|
ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, const Matrix4 &b);
|
|
ANGLE_UTIL_EXPORT Matrix4 operator*(const Matrix4 &a, float b);
|
|
ANGLE_UTIL_EXPORT Matrix4 &operator*=(Matrix4 &a, float b);
|
|
ANGLE_UTIL_EXPORT angle::Vector4 operator*(const Matrix4 &a, const angle::Vector4 &b);
|
|
|
|
ANGLE_UTIL_EXPORT bool operator==(const Matrix4 &a, const Matrix4 &b);
|
|
ANGLE_UTIL_EXPORT bool operator!=(const Matrix4 &a, const Matrix4 &b);
|
|
|
|
#endif // UTIL_MATRIX_H
|