序言
随着Unity技术的全球性大规模普及,其API的易用性得到了越来越多的开发者的青睐。
本篇在D子宇的工作基础上,仿照Unity的类结构,将其拓展转换为C++类模板。
以便在其它C++工程中更加方便使用。
源代码地址:https://github.com/duzixi/XYZ
博文首发:https://www.csdn.net/duzixi
源代码
Vector3.h
//
// Vector3.h
// XYZ
// 三维空间常用类模板C++实现。封装了三维空间向量的常用成员与方法。
//
// Created by 杜子兮(duzixi[at]gmail[dot]com) on 18-4-7.
// Copyright (c) 2018年 www.duzixi.com All rights reserved.
//
#pragma once
using namespace std;
namespace XYZ {
template <class T>
class Vector3
{
public:
T x;
T y;
T z;
// 构造函数 ==============================
Vector3();
Vector3(T _x, T _y);
Vector3(T _x, T _y, T _z);
// 析构函数
~Vector3();
// 属性====================================
// 常用向量
/* 本类采用坐标系如下:
y
^
|
| 俯视图 z轴垂直屏幕朝上
|
o-----------> x
*/
// (0, -1, 0)
static Vector3<T> back;
// (0, 0, -1)
static Vector3<T> down;
// (0, 1, 0)
static Vector3<T> forward;
// (0, 1, 0)
static Vector3<T> fwd;
// (-1, 0, 0)
static Vector3<T> left;
// (1, 1, 1)
static Vector3<T> one;
// (1, 0, 0)
static Vector3<T> right;
// (0, 0, 1)
static Vector3<T> up;
// (0, 0, 0)
static Vector3<T> zero;
// 模的平方
T sqrMagnitude;
// 模
T magnitude;
// 类方法 ===============================
// 点乘
static T Dot(Vector3<T> lhs, Vector3<T> rhs);
// 叉乘
static Vector3<T> Cross(Vector3<T> lhs, Vector3<T> rhs);
// 距离
static T Distance(Vector3<T> a, Vector3<T> b);
// 单位化
static Vector3<T> Normalize(Vector3<T> value);
// 夹角大小