view Engine/VectorTypes.h @ 2542:bacf9809126a

.
author a.parshin
date Sun, 10 May 2015 02:04:52 +0200
parents 68cdef6879a0
children
line wrap: on
line source

#pragma once

#include <cstdint>

uint32_t int_get_vector_length(int32_t x, int32_t y, int32_t z);

#pragma pack(push, 1)
template <class T>
struct Vec2
{
  T x;
  T y;

  inline Vec2(T a = 0, T b = 0):
    x(a), y(b)
  {}
};
#pragma pack(pop)

#define Vec2_int_ Vec2<int32_t>
#define Vec2_float_ Vec2<float>

#pragma pack(push, 1)
template <class T>
struct Vec3: public Vec2<T>
{
  T z;

  inline Vec3(T a = 0, T b = 0, T c = 0):
    Vec2(a, b), z(c)
  {}

  void Normalize_float();
  template <class U>
  inline uint32_t GetDistanceTo(Vec3<U> &o)
  {
    return int_get_vector_length(
      abs(this->x - o.x),
      abs(this->y - o.y),
      abs(this->z - o.z)
    );
  }

  static void __fastcall Rotate(T sDepth, T sRotY, T sRotX, Vec3<T> v, T *outx, T *outy, T *outz);
  static void Normalize(T *x, T *y, T *z);
};
#pragma pack(pop)

#define Vec3_short_ Vec3<int16_t>
#define Vec3_int_ Vec3<int32_t>

#pragma pack(push, 1)
struct Vec3_float_
{
  void Normalize();
  
  //----- (0049B32D) --------------------------------------------------------
  static Vec3_float_ *Vec3_float_::Cross(Vec3_float_ *v1, Vec3_float_ *pOut, float x, float y, float z)
  {
    pOut->x = z * v1->y - y * v1->z;
    pOut->y = x * v1->z - z * v1->x;
    pOut->z = y * v1->x - x * v1->y;
    return pOut;
  }

  //----- (0049B02E) --------------------------------------------------------
  inline static float NegDot(Vec3_float_ *a1, Vec3_float_ *a2, float *a3)
  {
    return *a3 = -(a1->z * a2->z + a1->y * a2->y + a1->x * a2->x);
  }

  float x;
  float y;
  float z;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct Vec4_int_
{
  int x;
  int y;
  int z;
  int w;
};
#pragma pack(pop)

/*   82 */
#pragma pack(push, 1)
struct Plane_int_
{
  Vec3_int_ vNormal;
  int dist;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct BBox_short_
{
  __int16 x1;
  __int16 x2;
  __int16 y1;
  __int16 y2;
  __int16 z1;
  __int16 z2;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct BBox_int_
{
  int x1;
  int x2;
  int y1;
  int y2;
  int z1;
  int z2;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct Plane_float_
{
  struct Vec3_float_ vNormal;
  float dist;
};
#pragma pack(pop)

/*  196 */
#pragma pack(push, 1)
struct Matrix3x3_float_
{
  union
  {
    struct
    {
      float _11; float _12; float _13;
      float _21; float _22; float _23;
      float _31; float _32; float _33;
    };
    float v[3][3];
  };
};
#pragma pack(pop)