- Hands-On C++ Game Animation Programming
- Gabor Szauer
- 481字
- 2021-06-30 14:45:55
Exploring more vectors
At some point later on in this book, you will need to utilize two- and four-component vectors as well. The two- and four-component vectors don't need any mathematical functions defined as they will be used exclusively as containers used to pass data to the GPU.
Unlike the three-component vector you have implemented, the two- and four-component vectors need to exist as both integer and floating point vectors. To avoid duplicating code, both structures will be implemented using a template:
- Create a new file, vec2.h, and add the definition of the vec2 struct. All the vec2 constructors are inline; there is no need for a cpp file. The TVec2 struct is templated and typedef is used to declare vec2 and ivec2:
template<typename T>
struct TVec2 {
union {
struct {
T x;
T y;
};
T v[2];
};
inline TVec2() : x(T(0)), y(T(0)) { }
inline TVec2(T _x, T _y) :
x(_x), y(_y) { }
inline TVec2(T* fv) :
x(fv[0]), y(fv[1]) { }
};
typedef TVec2<float> vec2;
typedef TVec2<int> ivec2;
- Similarly, create a vec4.h file, which will hold the vec4 structure:
template<typename T>
struct TVec4 {
union {
struct {
T x;
T y;
T z;
T w;
};
T v[4];
};
inline TVec4<T>(): x((T)0),y((T)0),z((T)0),w((T)0){}
inline TVec4<T>(T _x, T _y, T _z, T _w) :
x(_x), y(_y), z(_z), w(_w) { }
inline TVec4<T>(T* fv) :
x(fv[0]), y(fv[ ]), z(fv[2]), w(fv[3]) { }
};
typedef TVec4<float> vec4;
typedef TVec4<int> ivec4;
typedef TVec4<unsigned int> uivec4;
The declaration of the vec2, ivec2, vec4, and ivec4 structs are all very similar to the declaration of the vec3 struct. All these structures can be accessed using component subscripts or as a pointer to a linear array of memory. They all have similar constructors, as well.
- Getting Started with Citrix XenApp? 7.6
- 國際大學生程序設計競賽中山大學內部選拔真題解(二)
- Mastering Concurrency in Go
- iOS開發實戰:從零基礎到App Store上架
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- JavaScript:Moving to ES2015
- Learning OpenStack Networking(Neutron)
- 輕松上手2D游戲開發:Unity入門
- OpenStack Networking Essentials
- C++從入門到精通(第6版)
- 計算機應用基礎(第二版)
- 奔跑吧 Linux內核
- Python Machine Learning Cookbook
- 秒懂算法:用常識解讀數據結構與算法
- C語言進階:重點、難點與疑點解析