-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVecMath.h
89 lines (70 loc) · 2.15 KB
/
VecMath.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// VecMath.h
// GL_Project4
//
// Created by Justin Hust on 4/19/13.
// Copyright (c) 2013 __MyCompanyName__. All rights reserved.
//
#ifndef GL_Project4_VecMath_h
#define GL_Project4_VecMath_h
#include "common.h"
// vec4 used for lighting and materials
class Vec4 {
public:
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat w;
Vec4(GLfloat x_, GLfloat y_, GLfloat z_, GLfloat w_) {
x = x_;
y = y_;
z = z_;
w = w_;
}
};
// *******************************************
class Vec3 {
public:
GLfloat x;
GLfloat y;
GLfloat z;
// default ctor
Vec3(void);
Vec3(GLfloat x, GLfloat y, GLfloat z);
Vec3(Vec3 *v);
void Clear(void);
Vec3 ClampTo1(void);
void Set(GLfloat x_, GLfloat y_, GLfloat z_);
Vec3 Add(GLfloat x_, GLfloat y_, GLfloat z_) const;
Vec3 Add(const Vec3 v) const;
Vec3 Add(const Vec3 *v) const;
Vec3 Sub(const Vec3 v) const;
Vec3 Sub(const Vec3 *v) const;
Vec3 MultBy(GLfloat f) const;
Vec3 DivideBy(GLfloat f) const;
GLfloat Length(void) const;
// normalize this vector's internal data.
void Normalize(void);
// leave self alone, but return a normalized version of self.
Vec3 GetNormalized(void);
Vec3 RotateYDeg(float fDeg) const;
GLfloat r(void);
GLfloat g(void);
GLfloat b(void);
};
// some useful routines that don't really belong as part of a class.
GLfloat maxf(GLfloat num1, GLfloat num2);
Vec3 vec3_direction(const Vec3 *p, const Vec3 *q);
GLfloat vec3_dot(const Vec3 *v1, const Vec3 *v2);
Vec3 vec3_cross(const Vec3 *v, const Vec3 *w);
Vec3 vec3_normal(const Vec3 *v1, const Vec3 *v2, const Vec3 *v3, bool bNormalize);
Vec3 vec3_normal(const Vec3 v1, const Vec3 v2, const Vec3 v3, bool bNormalize);
Vec3 vec3_avg(const Vec3 *v1, const Vec3 *v2);
Vec3 vec3_avg(const Vec3 *v1, const Vec3 *v2, const Vec3 *v3, const Vec3 *v4);
Vec3 vec3_reflect(const Vec3 *v1, const Vec3 *norm);
GLfloat vec3_distance(const Vec3 *p, const Vec3 *q);
Vec3 vec3_get_spherical_uv(const Vec3 *vCenter, const Vec3 *vPointOnSphere);
bool points_same_side_of_ab(Vec3 *p1, Vec3 *p2, Vec3 *a, Vec3 *b);
typedef Vec3 RTColor;
RTColor color_modulate(const RTColor *c1, const RTColor *c2);
#endif