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

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.

主站蜘蛛池模板: 曲阳县| 钟山县| 南康市| 九台市| 沧州市| 越西县| 永靖县| 平武县| 宿松县| 丰原市| 玉溪市| 道孚县| 陆丰市| 馆陶县| 平南县| 高邑县| 从化市| 绥德县| 民县| 历史| 达州市| 航空| 黑水县| 山西省| 凌云县| 西乌| 政和县| 孟连| 饶平县| 土默特右旗| 大宁县| 桐柏县| 杭锦旗| 抚州市| 永登县| 枣强县| 武义县| 甘洛县| 恩平市| 岑巩县| 姜堰市|