Untitled

 avatar
unknown
c_cpp
4 months ago
1.7 kB
4
Indexable
struct matrix_t {
    matrix_t() {}
    matrix_t(
        float m00, float m01, float m02, float m03,
        float m10, float m11, float m12, float m13,
        float m20, float m21, float m22, float m23)
    {
        mat_val[0][0] = m00; mat_val[0][1] = m01; mat_val[0][2] = m02; mat_val[0][3] = m03;
        mat_val[1][0] = m10; mat_val[1][1] = m11; mat_val[1][2] = m12; mat_val[1][3] = m13;
        mat_val[2][0] = m20; mat_val[2][1] = m21; mat_val[2][2] = m22; mat_val[2][3] = m23;
    }
    void init(const vec3_t& xAxis, const vec3_t& yAxis, const vec3_t& zAxis, const vec3_t& vecOrigin) {
        mat_val[0][0] = xAxis.x; mat_val[0][1] = yAxis.x; mat_val[0][2] = zAxis.x; mat_val[0][3] = vecOrigin.x;
        mat_val[1][0] = xAxis.y; mat_val[1][1] = yAxis.y; mat_val[1][2] = zAxis.y; mat_val[1][3] = vecOrigin.y;
        mat_val[2][0] = xAxis.z; mat_val[2][1] = yAxis.z; mat_val[2][2] = zAxis.z; mat_val[2][3] = vecOrigin.z;
    }
    matrix_t(const vec3_t& xAxis, const vec3_t& yAxis, const vec3_t& zAxis, const vec3_t& vecOrigin) {
        init(xAxis, yAxis, zAxis, vecOrigin);
    }
    inline void set_origin(const vec3_t& p) {
        mat_val[0][3] = p.x;
        mat_val[1][3] = p.y;
        mat_val[2][3] = p.z;
    }
    inline void invalidate() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                mat_val[i][j] = VEC_T_NAN;
            }
        }
    }
    float* operator[](int i) { ASSERT((i >= 0) && (i < 3)); return mat_val[i]; }
    const float* operator[](int i) const { ASSERT((i >= 0) && (i < 3)); return mat_val[i]; }
    float* base() { return &mat_val[0][0]; }
    const float* base() const { return &mat_val[0][0]; }
    float mat_val[3][4];
};
Editor is loading...
Leave a Comment