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

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.

主站蜘蛛池模板: 华宁县| 颍上县| 巴彦县| 靖边县| 内丘县| 鹿泉市| 体育| 琼海市| 多伦县| 汉寿县| 沁水县| 长丰县| 天全县| 滁州市| 镇沅| 资兴市| 桐庐县| 华蓥市| 任丘市| 宝清县| 汪清县| 毕节市| 四平市| 扎兰屯市| 天全县| 丘北县| 葫芦岛市| 张家川| 和平区| 湘阴县| 嵊泗县| 乐安县| 巴中市| 冷水江市| 治多县| 台南市| 杭锦旗| 宜黄县| 望江县| 缙云县| 镇赉县|