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

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.

主站蜘蛛池模板: 策勒县| 获嘉县| 定南县| 高台县| 攀枝花市| 开阳县| 津市市| 铅山县| 大同市| 泽州县| 宜川县| 云龙县| 江门市| 和龙市| 宣武区| 重庆市| 阳东县| 巫溪县| 安义县| 武安市| 环江| 长寿区| 双辽市| 花垣县| 林西县| 雷州市| 梧州市| 黄平县| 平乡县| 宁国市| 云阳县| 云龙县| 阳高县| 怀柔区| 保亭| 酉阳| 沧源| 石柱| 阿瓦提县| 循化| 高州市|