官术网_书友最值得收藏!

Creating quaternions

Quaternions are used to encode rotation data. In code, quaternions will have four components. They resemble vec4 in that they have an x, y, z, and w component.

As with vec4, the w component comes last.

The quat structure should have two constructors. The default constructor creates an identity quaternion, (0, 0, 0, 1). The (0, 0, 0, 1) identity quaternion is like 1. Any number multiplied by 1 remains the same. Similarly, any quaternion multiplied by the identity quaternion remains the same:

Create a new file, quat.h, to declare the quaternion structure. The quat structure is going to be used throughout the rest of this book to represent rotations:

#ifndef _H_QUAT_

#define _H_QUAT_

#include "vec3.h"

#include "mat4.h"

struct quat {

   union {

       struct {

           float x;

           float y;

           float z;

           float w;

       };

       struct {

           vec3 vector;

           float scalar;

       };

       float v[4];

   };

   inline quat() :

       x(0), y(0), z(0), w(1) { }

   inline quat(float _x, float _y, float _z, float _w)

               : x(_x), y(_y), z(_z), w(_w) {}

};

#endif

The anonymous union inside the quat structure will allow you to access the data inside a quaternion through X, Y, Z, and W subscript notation, as a vector and scalar pair, or as an array of floating-point values.

Next, you're going to learn how to start creating quaternions.

主站蜘蛛池模板: 吐鲁番市| 弋阳县| 连州市| 封丘县| 斗六市| 青田县| 化州市| 达孜县| 桐庐县| 宜都市| 合肥市| 长岛县| 错那县| 宁陕县| 广平县| 高碑店市| 大安市| 平定县| 综艺| 民和| 繁昌县| 普宁市| 民权县| 信丰县| 泰兴市| 古丈县| 沈丘县| 姜堰市| 陇南市| 攀枝花市| 青河县| 华坪县| 双峰县| 鹿泉市| 汉寿县| 怀安县| 神农架林区| 浦江县| 彭水| 汝南县| 星子县|