Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- === VEC2.CPP ===
- vec2& vec2::operator =(const vec2 &srcVector){
- x = srcVector.x;
- y = srcVector.y;
- return *this;
- }
- vec2 vec2::operator +(const vec2& srcVector) const{
- vec2 result;
- result.x = x + srcVector.x;
- result.y = y + srcVector.y;
- return result;
- }
- vec2& vec2::operator +=(const vec2& srcVector){
- x+=srcVector.x;
- y+=srcVector.y;
- return *this;
- }
- vec2 vec2::operator *(float scalarValue) const{
- vec2 result;
- result.x = x*scalarValue;
- result.y = y*scalarValue;
- return result;
- }
- vec2 vec2::operator -(const vec2& srcVector) const{
- vec2 result;
- result.x=x-srcVector.x;
- result.y =y-srcVector.y;
- return result;
- }
- vec2& vec2::operator -=(const vec2& srcVector){
- x-=srcVector.x;
- y-=srcVector.y;
- return *this;
- }
- vec2& vec2::operator -(){
- x=-x;
- y=-y;
- return *this;
- }
- float vec2::length() const{
- return sqrt(x*x+y*y);
- }
- vec2& vec2::normalize(){
- float len = length();
- x = x/len;
- y = y/len;
- return *this;
- }
- float dotProduct(const vec2& v1, const vec2& v2){
- float result;
- result = v1.x*v2.x + v1.y*v2.y;
- return result;
- }
- === VEC3.CPP ===
- vec3& vec3::operator =(const vec3 &srcVector){
- x = srcVector.x;
- y = srcVector.y;
- z = srcVector.z;
- return *this;
- }
- vec3 vec3::operator +(const vec3& srcVector) const{
- vec3 result;
- result.x = x + srcVector.x;
- result.y = y + srcVector.y;
- result.z = z + srcVector.z;
- return result;
- }
- vec3& vec3::operator +=(const vec3& srcVector){
- x += srcVector.x;
- y += srcVector.y;
- z += srcVector.z;
- return *this;
- }
- vec3 vec3::operator *(float scalarValue) const{
- vec3 res;
- res.x = x*scalarValue;
- res.y = y*scalarValue;
- res.z = z*scalarValue;
- return res;
- }
- vec3 vec3::operator -(const vec3& srcVector) const{
- vec3 res;
- res.x = x - srcVector.x;
- res.y = y - srcVector.y;
- res.z = z - srcVector.z;
- return res;
- }
- vec3& vec3::operator -=(const vec3& srcVector){
- x-= srcVector.x;
- y-= srcVector.y;
- z-= srcVector.z;
- return *this;
- }
- vec3& vec3::operator -(){
- x = -x;
- y = -y;
- z = -z;
- return *this;
- }
- float vec3::length() const{
- return sqrt(x*x+y*y+z*z);
- }
- vec3& vec3::normalize(){
- float len = this->length();
- x = x/len;
- y = y/len;
- z = z/len;
- return *this;
- }
- float dotProduct(const vec3& v1, const vec3& v2){
- float res;
- res = v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
- return res;
- }
- vec3 crossProduct(const vec3& v1, const vec3& v2){
- return vec3(v1.y*v2.z - v1.z*v2.y,
- v1.z*v2.x - v1.x*v2.z,
- v1.x*v2.y - v1.y*v2.x);
- }
- === VEC4.CPP ===
- vec4& vec4::operator =(const vec4 &srcVector){
- x = srcVector.x;
- y = srcVector.y;
- z = srcVector.z;
- w = srcVector.w;
- return *this;
- }
- vec4 vec4::operator +(const vec4& srcVector) const{
- vec4 result;
- result.x = x+srcVector.x;
- result.y = y+srcVector.y;
- result.z = z+srcVector.z;
- result.w = w+srcVector.w;
- return result;
- }
- vec4& vec4::operator +=(const vec4& srcVector){
- x+=srcVector.x;
- y+=srcVector.y;
- z+=srcVector.z;
- w+=srcVector.w;
- return *this;
- }
- vec4 vec4::operator *(float scalarValue) const{
- vec4 result;
- result.x = x*scalarValue;
- result.y = y*scalarValue;
- result.z = z*scalarValue;
- result.w = w*scalarValue;
- return result;
- }
- vec4 vec4::operator -(const vec4& srcVector) const{
- vec4 result;
- result.x = x-srcVector.x;
- result.y = y-srcVector.y;
- result.z = z-srcVector.z;
- result.w = w-srcVector.w;
- return result;
- }
- vec4& vec4::operator -=(const vec4& srcVector){
- x-=srcVector.x;
- y-=srcVector.y;
- z-=srcVector.z;
- w-=srcVector.w;
- return *this;
- }
- vec4& vec4::operator -(){
- x = -x;
- y = -y;
- z = -z;
- w =-w;
- return *this;
- }
- float vec4::length() const{
- return sqrt(x*x+y*y+z*z+w*w);
- }
- vec4& vec4::normalize(){
- float len = this->length();
- x = x/len;
- y = y/len;
- z = z/len;
- w = w/len;
- return *this;
- }
- === MAT3.CPP ===
- mat3& mat3::operator=(const mat3 &srcMatrix){
- for(int i = 0; i < 9; i++)
- matrixData[i] = srcMatrix.matrixData[i];
- return *this;
- }
- mat3 mat3::operator*(float scalarValue) const {
- mat3 result;
- for(int i = 0; i < 9; i++ )
- result.matrixData[i] = matrixData[i] * scalarValue;
- return result;
- }
- mat3 mat3::operator*(const mat3 &srcMatrix) const {
- mat3 result;
- for(int i = 0; i < 3; i++)
- for(int j = 0; j < 3; j++)
- {
- result.at(i, j) = 0;
- for(int k = 0; k < 3; k++)
- result.at(i, j) += at(i, k) * srcMatrix.at(k, j);
- }
- return result;
- }
- vec3 mat3::operator*(const vec3 &srcVector) const {
- vec3 result;
- result.x = srcVector.x * at(0, 0) + srcVector.y * at(0, 1) + srcVector.z * at(0, 2);
- result.y = srcVector.x * at(1, 0) + srcVector.y * at(1, 1) + srcVector.z * at(1, 2);
- result.z = srcVector.x * at(2, 0) + srcVector.y * at(2, 1) + srcVector.z * at(2, 2);
- return result;
- }
- mat3 mat3::operator+(const mat3 &srcMatrix) const {
- mat3 result;
- for(int i = 0; i < 9; i++ )
- result.matrixData[i] = matrixData[i] + srcMatrix.matrixData[i];
- return result;
- }
- float& mat3::at(int i, int j) {
- return matrixData[i+3*j];
- }
- const float mat3::at(int i, int j) const {
- float result = matrixData[i+3*j];
- return result;
- }
- float mat3::determinant() const {
- float result = at(0,0)*at(1,1)*at(2,2) + at(1,0)*at(2,1)*at(0,2) + at(0,1)*at(2,0)*at(1,2) - at(2,0)*at(1,1)*at(0,2) - at(0,0)*at(2,1)*at(1,2) - at(2,2)*at(0,1)*at(1,0);
- return result;
- }
- mat3 mat3::inverse() const {
- float deter = this->determinant();
- mat3 inversa;
- for(int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 3; j++)
- {
- inversa.at(i,j) = ( at(((j+1)%3),((i+1)%3)) * at(((j+2)%3),((i+2)%3)) -
- at(((j+1)%3),((i+2)%3)) * at(((j+2)%3),((i+1)%3)) ) / deter;
- }
- }
- return inversa;
- }
- mat3 mat3::transpose() const {
- mat3 result;
- for(int i = 0; i < 3; i++)
- for(int j = 0; j < 3; j++)
- result.at(i,j) = at(j, i);
- return result;
- }
- === MAT4.CPP ===
- mat4& mat4::operator=(const mat4 &srcMatrix)
- {
- for(int i = 0; i < 16; i++)
- this->matrixData[i] = srcMatrix.matrixData[i];
- return *this;
- }
- mat4 mat4::operator*(float scalarValue) const
- {
- mat4 result;
- for(int i = 0; i < 16; i++ )
- result.matrixData[i] = this->matrixData[i] * scalarValue;
- return result;
- }
- mat4 mat4::operator*(const mat4 &srcMatrix) const
- {
- mat4 result;
- for(int i = 0; i < 4; i++)
- for(int j = 0; j < 4; j++)
- {
- result.at(i, j) = 0;
- for(int k = 0; k < 4; k++)
- result.at(i, j) += this->at(i, k) * srcMatrix.at(k, j);
- }
- return result;
- }
- vec4 mat4::operator*(const vec4 &srcVector) const
- {
- vec4 result;
- result.x = srcVector.x * at(0, 0) + srcVector.y * at(0, 1) + srcVector.z * at(0, 2) + srcVector.w * at(0,3);
- result.y = srcVector.x * at(1, 0) + srcVector.y * at(1, 1) + srcVector.z * at(1, 2) + srcVector.w * at(1,3);
- result.z = srcVector.x * at(2, 0) + srcVector.y * at(2, 1) + srcVector.z * at(2, 2) + srcVector.w * at(2,3);
- result.w = srcVector.x * at(3, 0) + srcVector.y * at(3, 1) + srcVector.z * at(3, 2) + srcVector.w * at(3,3);
- return result;
- }
- mat4 mat4::operator+(const mat4 &srcMatrix) const
- {
- mat4 result;
- for(int i = 0; i < 16; i++ )
- result.matrixData[i] = this->matrixData[i] + srcMatrix.matrixData[i];
- return result;
- }
- //get element by (row, column)
- float& mat4::at(int i, int j)
- {
- return matrixData[i+4*j];
- }
- const float mat4::at(int i, int j) const
- {
- float result = matrixData[i+4*j];
- return result;
- }
- float mat4::determinant() const
- {
- float result = at(0,0)*(at(1,1)*at(3,3)*at(2,2) + at(1,3)*at(2,1)*at(3,2) + at(3,1)*at(2,3)*at(1,2) - at(2,3)*at(1,1)*at(3,2) - at(3,3)*at(2,1)*at(1,2) - at(2,2)*at(3,1)*at(1,3)) -
- at(0,1)*(at(1,0)*at(3,3)*at(2,2) + at(1,3)*at(2,0)*at(3,2) + at(3,0)*at(2,3)*at(1,2) - at(2,3)*at(1,0)*at(3,2) - at(3,3)*at(2,0)*at(1,2) - at(2,2)*at(3,0)*at(1,3)) +
- at(0,2)*(at(1,0)*at(3,3)*at(2,1) + at(1,3)*at(2,0)*at(3,1) + at(3,0)*at(2,3)*at(1,1) - at(2,3)*at(1,0)*at(3,1) - at(3,3)*at(2,0)*at(1,1) - at(2,1)*at(3,0)*at(1,3)) -
- at(0,3)*(at(1,0)*at(3,2)*at(2,1) + at(1,2)*at(2,0)*at(3,1) + at(3,0)*at(2,2)*at(1,1) - at(2,2)*at(1,0)*at(3,1) - at(3,2)*at(2,0)*at(1,1) - at(2,1)*at(3,0)*at(1,2));
- return result;
- }
- mat4 mat4::inverse() const {
- mat4 aux;
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- int iAux = 0;
- int jAux = 0;
- mat3 aux3;
- for (int i1 = 0; i1 < 4; i1++) {
- if (i1 != i) {
- for (int j1 = 0; j1 < 4; j1++) {
- if (j1 != j) {
- aux3.at(iAux, jAux) = (*this).at(i1, j1);
- jAux++;
- if (jAux == 3) {
- jAux = 0;
- iAux++;
- }
- }
- }
- }
- }
- if ((i + j) % 2 == 0)
- aux.at(j, i) = aux3.determinant();
- else
- aux.at(j, i) = -aux3.determinant();
- }
- }
- return aux * (float)(1 / (*this).determinant());
- }
- mat4 mat4::transpose() const
- {
- mat4 result;
- for(int i = 0; i < 4; i++)
- for(int j = 0; j < 4; j++)
- result.at(i,j) = at(j, i);
- return result;
- }
- === TRANSFORM.CPP ===
- //transformation matrices in 2D
- mat3 translate(const vec2 translateArray) {
- mat3 m;
- m.at(0, 2) = translateArray.x;
- m.at(1, 2) = translateArray.y;
- return m;
- }
- mat3 translate(float tx, float ty){
- mat3 m;
- m.at(0, 2) = tx;
- m.at(1, 2) = ty;
- return m;
- }
- mat3 scale(const vec2 scaleArray){
- mat3 m;
- m.at(0,0) = scaleArray.x;
- m.at(1,1) = scaleArray.y;
- return m;
- }
- mat3 scale(float sx, float sy){
- mat3 m;
- m.at(0,0) = sx;
- m.at(1,1) = sy;
- return m;
- }
- mat3 rotate(float angle){
- float alpha = (PI*angle)/180;
- mat3 m;
- m.at(0,0) = cos(alpha);
- m.at(0,1) = sin(alpha)*(-1);
- m.at(1,0) = sin(alpha);
- m.at(1,1) = cos(alpha);
- return m;
- }
- //transformation matrices in 3D
- mat4 translate(const vec3 translateArray){
- mat4 m;
- m.at(0, 3) = translateArray.x;
- m.at(1, 3) = translateArray.y;
- m.at(2, 3) = translateArray.z;
- return m;
- }
- mat4 translate(float tx, float ty, float tz){
- mat4 m;
- m.at(0, 3) = tx;
- m.at(1, 3) = ty;
- m.at(2, 3) = tz;
- return m;
- }
- mat4 scale(const vec3 scaleArray){
- mat4 m;
- m.at(0,0) = scaleArray.x;
- m.at(1,1) = scaleArray.y;
- m.at(2,2) = scaleArray.z;
- return m;
- }
- mat4 scale(float sx, float sy, float sz){
- mat4 m;
- m.at(0,0) = sx;
- m.at(1,1) = sy;
- m.at(2,2) = sz;
- return m;
- }
- mat4 rotateX(float angle){
- mat4 m;
- float alpha = (PI*angle)/180;
- m.at(1,1) = cos(alpha);
- m.at(1,2) = sin(alpha)*(-1);
- m.at(2,1) = sin(alpha);
- m.at(2,2) = cos(alpha);
- return m;
- }
- mat4 rotateY(float angle){
- mat4 m;
- float alpha = (PI*angle)/180;
- m.at(0,0) = cos(alpha);
- m.at(2,0) = sin(alpha)*(-1);
- m.at(0,2) = sin(alpha);
- m.at(2,2) = cos(alpha);
- return m;
- }
- mat4 rotateZ(float angle){
- mat4 m;
- float alpha = (PI*angle)/180;
- m.at(0,0) = cos(alpha);
- m.at(0,1) = sin(alpha)*(-1);
- m.at(1,0) = sin(alpha);
- m.at(1,1) = cos(alpha);
- return m;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement