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

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.

主站蜘蛛池模板: 万盛区| 南投县| 昆山市| 阜城县| 疏勒县| 会同县| 江山市| 大名县| 新邵县| 曲沃县| 宾川县| 营口市| 洪江市| 徐闻县| 永登县| 大田县| 庆城县| 嵊泗县| 乌海市| 沁阳市| 贵港市| 江孜县| 苍南县| 武穴市| 揭西县| 太康县| 南澳县| 乐山市| 金阳县| 湄潭县| 迭部县| 武陟县| 盘锦市| 双牌县| 灯塔市| 宁武县| 育儿| 温宿县| 广东省| 伊春市| 佛学|