comparison Engine/VectorTypes.cpp @ 2499:68cdef6879a0

engine folder
author Ritor1
date Fri, 19 Sep 2014 02:57:42 +0600
parents
children
comparison
equal deleted inserted replaced
2498:92eeeb5200f2 2499:68cdef6879a0
1 #define _CRTDBG_MAP_ALLOC
2 #include <stdlib.h>
3 #include <crtdbg.h>
4
5 #define _CRT_SECURE_NO_WARNINGS
6 #include <utility>
7
8 #include "mm7_data.h"
9 #include "OurMath.h"
10
11 //----- (004621DA) --------------------------------------------------------
12 uint32_t int_get_vector_length(int32_t x, int32_t y, int32_t z)
13 {
14 if (x < y)
15 {
16 std::swap(x, y);
17 }
18 if (x < z)
19 {
20 std::swap(x, z);
21 }
22 if (y < z)
23 {
24 std::swap(y, z);
25 }
26
27 return x + (11 * y >> 5) + (z >> 2);
28 }
29
30 //----- (0044C362) --------------------------------------------------------
31 template <class T>
32 void Vec3<T>::Normalize_float()
33 {
34 double x = this->x;
35 double y = this->y;
36 double z = this->z;
37 double s = sqrt(x * x + y * y + z * z);
38
39 this->x = bankersRounding(x / s);
40 this->y = bankersRounding(y / s);
41 this->z = bankersRounding(z / s);
42 }
43
44 //----- (0043AA99) --------------------------------------------------------
45 template <class T>
46 void __fastcall Vec3<T>::Rotate(T sDepth, T sRotY, T sRotX, Vec3<T> v, T *outx, T *outy, T *outz)
47 {
48 float cosf_x = cosf(3.14159265f * sRotX / 1024.0f),
49 sinf_x = sinf(3.14159265f * sRotX / 1024.0f),
50 cosf_y = cosf(3.14159265f * sRotY / 1024.0f),
51 sinf_y = sinf(3.14159265f * sRotY / 1024.0f);
52
53 *outx = v.x + ((unsigned __int64)(sinf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
54 *outy = v.y + ((unsigned __int64)(cosf_y * (signed __int64)((unsigned __int64)(cosf_x * (signed __int64)sDepth)>> 16)));
55 *outz = v.z + ((unsigned __int64)(sinf_x * (signed __int64)sDepth) >> 16);
56 }
57
58 //----- (0043AB61) --------------------------------------------------------
59 template <class T>
60 void Vec3<T>::Normalize(T *x, T *y, T *z)
61 {
62 extern int integer_sqrt(int val);
63 *x *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
64 *y *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
65 *z *= 65536 / (integer_sqrt(*y * *y + *z * *z + *x * *x) | 1);
66 }
67
68 template Vec3<int32_t>;
69
70 //----- (004369DB) --------------------------------------------------------
71 void Vec3_float_::Normalize()
72 {
73 this->x = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->x;
74 this->y = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->y;
75 this->z = (1.0 / sqrt(this->x * this->x + this->y * this->y + this->z * this->z)) * this->z;
76 }