1#ifndef RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
2#define RAYLIB_CPP_INCLUDE_VECTOR4_HPP_
4#ifndef RAYLIB_CPP_NO_MATH
11#include "./raylib.hpp"
12#include "./raymath.hpp"
13#include "./raylib-cpp-utils.hpp"
14#include "./RadiansDegrees.hpp"
22 Vector4(const ::Vector4& vec) : ::Vector4{vec.x, vec.y, vec.z, vec.w} {}
24 Vector4(
float x,
float y,
float z,
float w) : ::Vector4{x, y, z, w} {}
25 Vector4(
float x,
float y,
float z) : ::Vector4{x, y, z, 0} {}
26 Vector4(
float x,
float y) : ::Vector4{x, y, 0, 0} {}
27 Vector4(
float x) : ::Vector4{x, 0, 0, 0} {}
28 Vector4() : ::Vector4{0, 0, 0, 0} {}
29 Vector4(::Rectangle rectangle) : ::Vector4{rectangle.x, rectangle.y, rectangle.width, rectangle.height} {}
32 set(ColorNormalize(color));
35 GETTERSETTER(
float, X, x)
36 GETTERSETTER(
float, Y, y)
37 GETTERSETTER(
float, Z, z)
38 GETTERSETTER(
float, W, w)
45 bool operator==(const ::Vector4& other)
const {
52 bool operator!=(const ::Vector4& other)
const {
53 return !(*
this == other);
56 ::Rectangle ToRectangle()
const {
60 operator ::Rectangle()
const {
64 std::string ToString()
const {
65 return TextFormat(
"Vector4(%f, %f, %f, %f)", x, y, z, w);
68 operator std::string()
const {
72#ifndef RAYLIB_CPP_NO_MATH
73 Vector4 Multiply(const ::Vector4& vector4)
const {
74 return QuaternionMultiply(*
this, vector4);
77 Vector4 operator*(const ::Vector4& vector4)
const {
78 return QuaternionMultiply(*
this, vector4);
81 Vector4 Lerp(const ::Vector4& vector4,
float amount)
const {
82 return QuaternionLerp(*
this, vector4, amount);
85 Vector4 Nlerp(const ::Vector4& vector4,
float amount)
const {
86 return QuaternionNlerp(*
this, vector4, amount);
89 Vector4 Slerp(const ::Vector4& vector4,
float amount)
const {
90 return QuaternionSlerp(*
this, vector4, amount);
93 Matrix ToMatrix()
const {
94 return QuaternionToMatrix(*
this);
97 float Length()
const {
98 return QuaternionLength(*
this);
101 Vector4 Normalize()
const {
102 return QuaternionNormalize(*
this);
105 Vector4 Invert()
const {
106 return QuaternionInvert(*
this);
109 void ToAxisAngle(::Vector3 *outAxis,
float *outAngle)
const {
110 QuaternionToAxisAngle(*
this, outAxis, outAngle);
112 void ToAxisAngle(::Vector3 *outAxis, Radian *outAngle)
const {
124 QuaternionToAxisAngle(*
this, &outAxis, &outAngle);
126 return std::pair<Vector3, Radian>(outAxis, outAngle);
130 return ::QuaternionTransform(*
this, matrix);
133 static Vector4 Identity() {
134 return ::QuaternionIdentity();
137 static Vector4 FromVector3ToVector3(const ::Vector3& from , const ::Vector3& to) {
138 return ::QuaternionFromVector3ToVector3(from , to);
141 static Vector4 FromMatrix(const ::Matrix& matrix) {
142 return ::QuaternionFromMatrix(matrix);
145 static Vector4 FromAxisAngle(const ::Vector3& axis,
const Radian angle) {
146 return ::QuaternionFromAxisAngle(axis, angle);
149 static Vector4 FromEuler(
const Degree pitch,
const Degree yaw,
const Degree roll) {
150 return ::QuaternionFromEuler(pitch, yaw, roll);
153 static Vector4 FromEuler(const ::Vector3& vector3) {
154 return ::QuaternionFromEuler(vector3.x, vector3.y, vector3.z);
157 Vector3 ToEuler()
const {
158 return ::QuaternionToEuler(*
this);
162 Color ColorFromNormalized()
const {
163 return ::ColorFromNormalized(*
this);
166 operator Color()
const {
167 return ColorFromNormalized();
171 void set(const ::Vector4& vec4) {
180using Quaternion = Vector4;
Matrix type (OpenGL style 4x4 - right handed, column major)
std::pair< Vector3, Radian > ToAxisAngle() const
Get the rotation angle and axis for a given quaternion.