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

Creating a vector

Vectors will be implemented as structures, not classes. The vector struct will contain an anonymous union that allows the vector's components to be accessed as an array or as individual elements.

To declare the vec3 structure and the function headers, create a new file, vec3.h. Declare the new vec3 structure in this file. The vec3 struct needs three constructors—a default constructor, one that takes each component as an element, and one that takes a pointer to a float array:

#ifndef _H_VEC3_

#define _H_VEC3_

struct vec3 {

    union {

        struct  {

            float x;

            float y;

            float z;

        };

        float v[3];

    };

    inline vec3() : x(0.0f), y(0.0f), z(0.0f) { }

    inline vec3(float _x, float _y, float _z) :

        x(_x), y(_y), z(_z) { }

    inline vec3(float *fv) :

        x(fv[0]), y(fv[1]), z(fv[2]) { }

};

#endif

The anonymous union in the vec3 struct allows data to be accessed using .x, .y, and .z notation, or as a contiguous array using .v. Before moving on to implementing functions that work on the vec3 struct, you need to consider comparing floating point numbers and whether or not to use an epsilon value.

主站蜘蛛池模板: 资中县| 呼玛县| 平和县| 武汉市| 小金县| 腾冲县| 旬邑县| 瑞昌市| 漠河县| 榆社县| 东阿县| 肇庆市| 洪泽县| 浙江省| 巴里| 新干县| 临安市| 蓝山县| 江城| 揭东县| 绥中县| 织金县| 义乌市| 治多县| 康保县| 东辽县| 宜良县| 郑州市| 万山特区| 陇川县| 瓦房店市| 石屏县| 洛南县| 顺平县| 天峻县| 沙坪坝区| 昌吉市| 深水埗区| 五河县| 虞城县| 清远市|