diff Engine/VectorTypes.cpp @ 2499:68cdef6879a0

engine folder
author Ritor1
date Fri, 19 Sep 2014 02:57:42 +0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Engine/VectorTypes.cpp	Fri Sep 19 02:57:42 2014 +0600
@@ -0,0 +1,76 @@
+#define _CRTDBG_MAP_ALLOC
+#include <stdlib.h>
+#include <crtdbg.h>
+
+#define _CRT_SECURE_NO_WARNINGS
+#include <utility>
+
+#include "mm7_data.h"
+#include "OurMath.h"
+
+//----- (004621DA) --------------------------------------------------------
+uint32_t int_get_vector_length(int32_t x, int32_t y, int32_t z)
+{
+  if (x < y)
+  {
+    std::swap(x, y);
+  }
+  if (x < z)
+  {
+    std::swap(x, z);
+  }
+  if (y < z)
+  {
+    std::swap(y, z);
+  }
+
+  return x + (11 * y >> 5) + (z >> 2);
+}
+
+//----- (0044C362) --------------------------------------------------------
+template <class T>
+void Vec3<T>::Normalize_float()
+{
+  double x = this->x;
+  double y = this->y;
+  double z = this->z;
+  double s = sqrt(x * x + y * y + z * z);
+
+  this->x = bankersRounding(x / s);
+  this->y = bankersRounding(y / s);
+  this->z = bankersRounding(z / s);
+}
+
+//----- (0043AA99) --------------------------------------------------------
+template <class T>
+void __fastcall Vec3<T>::Rotate(T sDepth, T sRotY, T sRotX, Vec3<T> v, T *outx, T *outy, T *outz)
+{
+ float cosf_x = cosf(3.14159265f * sRotX / 1024.0f),
+       sinf_x = sinf(3.14159265f * sRotX / 1024.0f),
+       cosf_y = cosf(3.14159265f * sRotY / 1024.0f),
+       sinf_y = sinf(3.14159265f * sRotY / 1024.0f);
+
+ *outx = v.x + ((unsigned __int64)(sinf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
+ *outy = v.y + ((unsigned __int64)(cosf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
+ *outz = v.z + ((unsigned __int64)(sinf_x * (signed __int64)sDepth) >> 16);
+}
+
+//----- (0043AB61) --------------------------------------------------------
+template <class T>
+void Vec3<T>::Normalize(T *x, T *y, T *z)
+{
+  extern int integer_sqrt(int val);
+  *x *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
+  *y *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
+  *z *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
+}
+
+template Vec3<int32_t>;
+
+//----- (004369DB) --------------------------------------------------------
+void Vec3_float_::Normalize()
+{
+	this->x = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->x;
+	this->y = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->y;
+	this->z = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->z;
+}
\ No newline at end of file