Вопрос Help Проблема со сложением матриц при пастинге лвара

Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2022
Сообщения
299
Реакции[?]
21
Поинты[?]
0
Здравствуйте, пастил мультипоинты с этой темы - https://yougame.biz/threads/262242/ , все сделал как надо вроде, проблема на 59 строке в файле Ray_tracer.cpp.txt(прикреплен в теме).1659695686048.png
тут ошибка при сложении матриц, как ее исправить(то что 64 а не 59 строка не обращайте внимание это я с юц пастил *noad) тоесть тут просто она не может определится я так понял.1659695767529.png
инклудил файл матриц где есть функция оператора сложения матриц мб она не так подключена? аналогичная тема еще есть на юц *noad -
Пожалуйста, авторизуйтесь для просмотра ссылки.
я там посмотрел инклуды правильные, подскажите пж чо сделать?
 
че
Пользователь
Статус
Оффлайн
Регистрация
27 Фев 2021
Сообщения
476
Реакции[?]
64
Поинты[?]
16K
нахуй вы лв пастите, вы из этого сурса ничего нормального не сделаете, если ты хочешь пастить меняй там все от начала до конца
 
Начинающий
Статус
Онлайн
Регистрация
4 Июн 2022
Сообщения
71
Реакции[?]
10
Поинты[?]
2K
You need to replace the legendware matrix struct with the struct from enrage.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Here is the already converted code to legendware hf pasting.
C++:
struct matrix3x4_t
{
    matrix3x4_t() {}
    matrix3x4_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)
    {
        m_flMatVal[0][0] = m00; m_flMatVal[0][1] = m01; m_flMatVal[0][2] = m02; m_flMatVal[0][3] = m03;
        m_flMatVal[1][0] = m10; m_flMatVal[1][1] = m11; m_flMatVal[1][2] = m12; m_flMatVal[1][3] = m13;
        m_flMatVal[2][0] = m20; m_flMatVal[2][1] = m21; m_flMatVal[2][2] = m22; m_flMatVal[2][3] = m23;
    }

    //------------------------------------------------ ------------------------------
    // Creates a matrix where the X axis = forward
    // the Y axis = left, and the Z axis = up
    //------------------------------------------------ ------------------------------
    void Init(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector& vecOrigin)
    {
        m_flMatVal[0][0] = xAxis.x; m_flMatVal[0][1] = yAxis.x; m_flMatVal[0][2] = zAxis.x; m_flMatVal[0][3] = vecOrigin.x;
        m_flMatVal[1][0] = xAxis.y; m_flMatVal[1][1] = yAxis.y; m_flMatVal[1][2] = zAxis.y; m_flMatVal[1][3] = vecOrigin.y;
        m_flMatVal[2][0] = xAxis.z; m_flMatVal[2][1] = yAxis.z; m_flMatVal[2][2] = zAxis.z; m_flMatVal[2][3] = vecOrigin.z;
    }

    //------------------------------------------------ ------------------------------
    // Creates a matrix where the X axis = forward
    // the Y axis = left, and the Z axis = up
    //------------------------------------------------ ------------------------------
    matrix3x4_t(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector& vecOrigin)
    {
        Init(xAxis, yAxis, zAxis, vecOrigin);
    }

    inline void SetOrigin(Vector const&p)
    {
        m_flMatVal[0][3] = px;
        m_flMatVal[1][3] = py;
        m_flMatVal[2][3] = pz;
    }

    inline Vector GetOrigin()
    {
        return Vector(m_flMatVal[0][3],
            m_flMatVal[1][3],
            m_flMatVal[2][3]);
    }

    inline void Invalidate(void)
    {
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                m_flMatVal[i][j] = VEC_T_NAN;
            }
        }
    }

    inline bool IsValid()
    {
        if (this == nullptr)
            return false;

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                if (m_flMatVal[i][j] == VEC_T_NAN)
                    return false;
            }
        }
        return true;
    }

    void Clear()
    {
        m_flMatVal[0][0] = 0.f; m_flMatVal[0][1] = 0.f; m_flMatVal[0][2] = 0.f; m_flMatVal[0][3] = 0.f;
        m_flMatVal[1][0] = 0.f; m_flMatVal[1][1] = 0.f; m_flMatVal[1][2] = 0.f; m_flMatVal[1][3] = 0.f;
        m_flMatVal[2][0] = 0.f; m_flMatVal[2][1] = 0.f; m_flMatVal[2][2] = 0.f; m_flMatVal[2][3] = 0.f;
    }

    void AngleMatrix(const Vector& angles)
    {
        float sr, sp, sy, cr, cp, cy;
        DirectX::XMScalarSinCos(&sy, &cy, ToRadians(angles[1]));
        DirectX::XMScalarSinCos(&sp, &cp, ToRadians(angles[0]));
        DirectX::XMScalarSinCos(&sr, &cr, ToRadians(angles[2]));

        m_flMatVal[0][0] = cp * cy;
        m_flMatVal[1][0] = cp * sy;
        m_flMatVal[2][0] = -sp;

        float crcy = cr * cy;
        float crsy = cr*sy;
        float srcy = sr * cy;
        float srsy = sr * sy;
        m_flMatVal[0][1] = sp * srcy - crsy;
        m_flMatVal[1][1] = sp * srsy + crcy;
        m_flMatVal[2][1] = sr * cp;

        m_flMatVal[0][2] = (sp * crcy + srsy);
        m_flMatVal[1][2] = (sp * crsy - srcy);
        m_flMatVal[2][2] = cr * cp;

        m_flMatVal[0][3] = 0.0f;
        m_flMatVal[1][3] = 0.0f;
        m_flMatVal[2][3] = 0.0f;
    }

    void MatrixSetColumn(const Vector& in, int column)
    {
        m_flMatVal[0][column] = in.x;
        m_flMatVal[1][column] = in.y;
        m_flMatVal[2][column] = in.z;
    }

    void AngleMatrix(const Vector& angles, const Vector& position)
    {
        AngleMatrix(angles);
        MatrixSetColumn(position, 3);
    }

    void QuaternionMatrix(const Quaternion& q)
    {
        m_flMatVal[0][0] = 1.0 - 2.0 * qy * qy - 2.0 * qz * qz;
        m_flMatVal[1][0] = 2.0 * qx * qy + 2.0 * qw * qz;
        m_flMatVal[2][0] = 2.0 * qx * qz - 2.0 * qw * qy;

        m_flMatVal[0][1] = 2.0f * qx * qy - 2.0f * qw * qz;
        m_flMatVal[1][1] = 1.0f - 2.0f * qx * qx - 2.0f * qz * qz;
        m_flMatVal[2][1] = 2.0f * qy * qz + 2.0f * qw * qx;

        m_flMatVal[0][2] = 2.0f * qx * qz + 2.0f * qw * qy;
        m_flMatVal[1][2] = 2.0f * qy * qz - 2.0f * qw * qx;
        m_flMatVal[2][2] = 1.0f - 2.0f * qx * qx - 2.0f * qy * qy;

        m_flMatVal[0][3] = 0.0f;
        m_flMatVal[1][3] = 0.0f;
        m_flMatVal[2][3] = 0.0f;
    }

    void QuaternionMatrix(const Quaternion& q, const Vector& pos)
    {
        QuaternionMatrix(q);

        m_flMatVal[0][3] = pos.x;
        m_flMatVal[1][3] = pos.y;
        m_flMatVal[2][3] = pos.z;
    }

    matrix3x4_t matrix3x4_t::ConcatTransforms(matrix3x4_t in) const
    {
        matrix3x4_t out;

        out[0][0] = m_flMatVal[0][0] * in[0][0] + m_flMatVal[0][1] * in[1][0] + m_flMatVal[0][2] * in[ 2][0];
        out[0][1] = m_flMatVal[0][0] * in[0][1] + m_flMatVal[0][1] * in[1][1] + m_flMatVal[0][2] * in[ 2][1];
        out[0][2] = m_flMatVal[0][0] * in[0][2] + m_flMatVal[0][1] * in[1][2] + m_flMatVal[0][2] * in[ 2][2];
        out[0][3] = m_flMatVal[0][0] * in[0][3] + m_flMatVal[0][1] * in[1][3] + m_flMatVal[0][2] * in[ 2][3] + m_flMatVal[0][3];
        out[1][0] = m_flMatVal[1][0] * in[0][0] + m_flMatVal[1][1] * in[1][0] + m_flMatVal[1][2] * in[ 2][0];
        out[1][1] = m_flMatVal[1][0] * in[0][1] + m_flMatVal[1][1] * in[1][1] + m_flMatVal[1][2] * in[ 2][1];
        out[1][2] = m_flMatVal[1][0] * in[0][2] + m_flMatVal[1][1] * in[1][2] + m_flMatVal[1][2] * in[ 2][2];
        out[1][3] = m_flMatVal[1][0] * in[0][3] + m_flMatVal[1][1] * in[1][3] + m_flMatVal[1][2] * in[ 2][3] + m_flMatVal[1][3];
        out[2][0] = m_flMatVal[2][0] * in[0][0] + m_flMatVal[2][1] * in[1][0] + m_flMatVal[2][2] * in[ 2][0];
        out[2][1] = m_flMatVal[2][0] * in[0][1] + m_flMatVal[2][1] * in[1][1] + m_flMatVal[2][2] * in[ 2][1];
        out[2][2] = m_flMatVal[2][0] * in[0][2] + m_flMatVal[2][1] * in[1][2] + m_flMatVal[2][2] * in[ 2][2];
        out[2][3] = m_flMatVal[2][0] * in[0][3] + m_flMatVal[2][1] * in[1][3] + m_flMatVal[2][2] * in[ 2][3] + m_flMatVal[2][3];

        return out;
    }

    float* operator[](int i) {
        if ((i >= 0) && (i < 3) && m_flMatVal[i])
        {
            return m_flMatVal[i];
        }
        else return NULL;
    }
    const float* operator[](int i) const {
        if ((i >= 0) && (i < 3) && m_flMatVal[i])
        {
            return m_flMatVal[i];
        }
        else return NULL;
    }

    vector matrix3x4_t::operator*(const Vector& vVec) const {
        auto& m = m_flMatVal;
        VectorvRet;
        vRet.x = m[0][0] * vVec.x + m[0][1] * vVec.y + m[0][2] * vVec.z + m[0][3];
        vRet.y = m[1][0] * vVec.x + m[1][1] * vVec.y + m[1][2] * vVec.z + m[1][3];
        vRet.z = m[2][0] * vVec.x + m[2][1] * vVec.y + m[2][2] * vVec.z + m[2][3];

        return vRet;
    }

    matrix3x4_t matrix3x4_t::operator+(const matrix3x4_t& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] + ((float*)other.m_flMatVal)[i];
        }
        return ret;
    }

    matrix3x4_t matrix3x4_t::operator-(const matrix3x4_t& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] - ((float*)other.m_flMatVal)[i];
        }
        return ret;
    }

    matrix3x4_t matrix3x4_t::operator*(const float& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] * other;
        }
        return ret;
    }

    matrix3x4_t operator*(const matrix3x4_t& vm) const {
        return ConcatTransforms(vm);
    }
    float* Base() { return &m_flMatVal[0][0]; }
    const float* Base() const { return &m_flMatVal[0][0]; }

    float m_flMatVal[3][4];
};
 
Начинающий
Статус
Оффлайн
Регистрация
28 Мар 2021
Сообщения
11
Реакции[?]
0
Поинты[?]
0
You need to replace the legendware matrix struct with the struct from enrage.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Here is the already converted code to legendware hf pasting.
C++:
struct matrix3x4_t
{
    matrix3x4_t() {}
    matrix3x4_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)
    {
        m_flMatVal[0][0] = m00; m_flMatVal[0][1] = m01; m_flMatVal[0][2] = m02; m_flMatVal[0][3] = m03;
        m_flMatVal[1][0] = m10; m_flMatVal[1][1] = m11; m_flMatVal[1][2] = m12; m_flMatVal[1][3] = m13;
        m_flMatVal[2][0] = m20; m_flMatVal[2][1] = m21; m_flMatVal[2][2] = m22; m_flMatVal[2][3] = m23;
    }

    //------------------------------------------------ ------------------------------
    // Creates a matrix where the X axis = forward
    // the Y axis = left, and the Z axis = up
    //------------------------------------------------ ------------------------------
    void Init(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector& vecOrigin)
    {
        m_flMatVal[0][0] = xAxis.x; m_flMatVal[0][1] = yAxis.x; m_flMatVal[0][2] = zAxis.x; m_flMatVal[0][3] = vecOrigin.x;
        m_flMatVal[1][0] = xAxis.y; m_flMatVal[1][1] = yAxis.y; m_flMatVal[1][2] = zAxis.y; m_flMatVal[1][3] = vecOrigin.y;
        m_flMatVal[2][0] = xAxis.z; m_flMatVal[2][1] = yAxis.z; m_flMatVal[2][2] = zAxis.z; m_flMatVal[2][3] = vecOrigin.z;
    }

    //------------------------------------------------ ------------------------------
    // Creates a matrix where the X axis = forward
    // the Y axis = left, and the Z axis = up
    //------------------------------------------------ ------------------------------
    matrix3x4_t(const Vector& xAxis, const Vector& yAxis, const Vector& zAxis, const Vector& vecOrigin)
    {
        Init(xAxis, yAxis, zAxis, vecOrigin);
    }

    inline void SetOrigin(Vector const&p)
    {
        m_flMatVal[0][3] = px;
        m_flMatVal[1][3] = py;
        m_flMatVal[2][3] = pz;
    }

    inline Vector GetOrigin()
    {
        return Vector(m_flMatVal[0][3],
            m_flMatVal[1][3],
            m_flMatVal[2][3]);
    }

    inline void Invalidate(void)
    {
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                m_flMatVal[i][j] = VEC_T_NAN;
            }
        }
    }

    inline bool IsValid()
    {
        if (this == nullptr)
            return false;

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                if (m_flMatVal[i][j] == VEC_T_NAN)
                    return false;
            }
        }
        return true;
    }

    void Clear()
    {
        m_flMatVal[0][0] = 0.f; m_flMatVal[0][1] = 0.f; m_flMatVal[0][2] = 0.f; m_flMatVal[0][3] = 0.f;
        m_flMatVal[1][0] = 0.f; m_flMatVal[1][1] = 0.f; m_flMatVal[1][2] = 0.f; m_flMatVal[1][3] = 0.f;
        m_flMatVal[2][0] = 0.f; m_flMatVal[2][1] = 0.f; m_flMatVal[2][2] = 0.f; m_flMatVal[2][3] = 0.f;
    }

    void AngleMatrix(const Vector& angles)
    {
        float sr, sp, sy, cr, cp, cy;
        DirectX::XMScalarSinCos(&sy, &cy, ToRadians(angles[1]));
        DirectX::XMScalarSinCos(&sp, &cp, ToRadians(angles[0]));
        DirectX::XMScalarSinCos(&sr, &cr, ToRadians(angles[2]));

        m_flMatVal[0][0] = cp * cy;
        m_flMatVal[1][0] = cp * sy;
        m_flMatVal[2][0] = -sp;

        float crcy = cr * cy;
        float crsy = cr*sy;
        float srcy = sr * cy;
        float srsy = sr * sy;
        m_flMatVal[0][1] = sp * srcy - crsy;
        m_flMatVal[1][1] = sp * srsy + crcy;
        m_flMatVal[2][1] = sr * cp;

        m_flMatVal[0][2] = (sp * crcy + srsy);
        m_flMatVal[1][2] = (sp * crsy - srcy);
        m_flMatVal[2][2] = cr * cp;

        m_flMatVal[0][3] = 0.0f;
        m_flMatVal[1][3] = 0.0f;
        m_flMatVal[2][3] = 0.0f;
    }

    void MatrixSetColumn(const Vector& in, int column)
    {
        m_flMatVal[0][column] = in.x;
        m_flMatVal[1][column] = in.y;
        m_flMatVal[2][column] = in.z;
    }

    void AngleMatrix(const Vector& angles, const Vector& position)
    {
        AngleMatrix(angles);
        MatrixSetColumn(position, 3);
    }

    void QuaternionMatrix(const Quaternion& q)
    {
        m_flMatVal[0][0] = 1.0 - 2.0 * qy * qy - 2.0 * qz * qz;
        m_flMatVal[1][0] = 2.0 * qx * qy + 2.0 * qw * qz;
        m_flMatVal[2][0] = 2.0 * qx * qz - 2.0 * qw * qy;

        m_flMatVal[0][1] = 2.0f * qx * qy - 2.0f * qw * qz;
        m_flMatVal[1][1] = 1.0f - 2.0f * qx * qx - 2.0f * qz * qz;
        m_flMatVal[2][1] = 2.0f * qy * qz + 2.0f * qw * qx;

        m_flMatVal[0][2] = 2.0f * qx * qz + 2.0f * qw * qy;
        m_flMatVal[1][2] = 2.0f * qy * qz - 2.0f * qw * qx;
        m_flMatVal[2][2] = 1.0f - 2.0f * qx * qx - 2.0f * qy * qy;

        m_flMatVal[0][3] = 0.0f;
        m_flMatVal[1][3] = 0.0f;
        m_flMatVal[2][3] = 0.0f;
    }

    void QuaternionMatrix(const Quaternion& q, const Vector& pos)
    {
        QuaternionMatrix(q);

        m_flMatVal[0][3] = pos.x;
        m_flMatVal[1][3] = pos.y;
        m_flMatVal[2][3] = pos.z;
    }

    matrix3x4_t matrix3x4_t::ConcatTransforms(matrix3x4_t in) const
    {
        matrix3x4_t out;

        out[0][0] = m_flMatVal[0][0] * in[0][0] + m_flMatVal[0][1] * in[1][0] + m_flMatVal[0][2] * in[ 2][0];
        out[0][1] = m_flMatVal[0][0] * in[0][1] + m_flMatVal[0][1] * in[1][1] + m_flMatVal[0][2] * in[ 2][1];
        out[0][2] = m_flMatVal[0][0] * in[0][2] + m_flMatVal[0][1] * in[1][2] + m_flMatVal[0][2] * in[ 2][2];
        out[0][3] = m_flMatVal[0][0] * in[0][3] + m_flMatVal[0][1] * in[1][3] + m_flMatVal[0][2] * in[ 2][3] + m_flMatVal[0][3];
        out[1][0] = m_flMatVal[1][0] * in[0][0] + m_flMatVal[1][1] * in[1][0] + m_flMatVal[1][2] * in[ 2][0];
        out[1][1] = m_flMatVal[1][0] * in[0][1] + m_flMatVal[1][1] * in[1][1] + m_flMatVal[1][2] * in[ 2][1];
        out[1][2] = m_flMatVal[1][0] * in[0][2] + m_flMatVal[1][1] * in[1][2] + m_flMatVal[1][2] * in[ 2][2];
        out[1][3] = m_flMatVal[1][0] * in[0][3] + m_flMatVal[1][1] * in[1][3] + m_flMatVal[1][2] * in[ 2][3] + m_flMatVal[1][3];
        out[2][0] = m_flMatVal[2][0] * in[0][0] + m_flMatVal[2][1] * in[1][0] + m_flMatVal[2][2] * in[ 2][0];
        out[2][1] = m_flMatVal[2][0] * in[0][1] + m_flMatVal[2][1] * in[1][1] + m_flMatVal[2][2] * in[ 2][1];
        out[2][2] = m_flMatVal[2][0] * in[0][2] + m_flMatVal[2][1] * in[1][2] + m_flMatVal[2][2] * in[ 2][2];
        out[2][3] = m_flMatVal[2][0] * in[0][3] + m_flMatVal[2][1] * in[1][3] + m_flMatVal[2][2] * in[ 2][3] + m_flMatVal[2][3];

        return out;
    }

    float* operator[](int i) {
        if ((i >= 0) && (i < 3) && m_flMatVal[i])
        {
            return m_flMatVal[i];
        }
        else return NULL;
    }
    const float* operator[](int i) const {
        if ((i >= 0) && (i < 3) && m_flMatVal[i])
        {
            return m_flMatVal[i];
        }
        else return NULL;
    }

    vector matrix3x4_t::operator*(const Vector& vVec) const {
        auto& m = m_flMatVal;
        VectorvRet;
        vRet.x = m[0][0] * vVec.x + m[0][1] * vVec.y + m[0][2] * vVec.z + m[0][3];
        vRet.y = m[1][0] * vVec.x + m[1][1] * vVec.y + m[1][2] * vVec.z + m[1][3];
        vRet.z = m[2][0] * vVec.x + m[2][1] * vVec.y + m[2][2] * vVec.z + m[2][3];

        return vRet;
    }

    matrix3x4_t matrix3x4_t::operator+(const matrix3x4_t& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] + ((float*)other.m_flMatVal)[i];
        }
        return ret;
    }

    matrix3x4_t matrix3x4_t::operator-(const matrix3x4_t& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] - ((float*)other.m_flMatVal)[i];
        }
        return ret;
    }

    matrix3x4_t matrix3x4_t::operator*(const float& other) const {
        matrix3x4_t ret;
        auto& m = m_flMatVal;
        for (int i = 0; i < 12; i++) {
            ((float*)ret.m_flMatVal)[i] = ((float*)m)[i] * other;
        }
        return ret;
    }

    matrix3x4_t operator*(const matrix3x4_t& vm) const {
        return ConcatTransforms(vm);
    }
    float* Base() { return &m_flMatVal[0][0]; }
    const float* Base() const { return &m_flMatVal[0][0]; }

    float m_flMatVal[3][4];
};
idk if im absolutley retarded, but i have no idea why this error happens since im new to coding in general. Can you please point me in the right dirction? I did paste the struct from enrage and now i ran into this.
 

Вложения

Сверху Снизу