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

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.

主站蜘蛛池模板: 沁水县| 康保县| 改则县| 威海市| 昌吉市| 沙湾县| 南宫市| 荣昌县| 莱西市| 阿拉善左旗| 巴彦淖尔市| 高雄县| 茌平县| 陕西省| 吴旗县| 四会市| 于都县| 平江县| 安多县| 秀山| 商都县| 黄浦区| 察隅县| 桃江县| 隆化县| 仁化县| 高雄市| 南投市| 偃师市| 大悟县| 丹阳市| 桃园县| 秦安县| 常山县| 沂水县| 麻阳| 格尔木市| 左贡县| 青浦区| 荃湾区| 京山县|