Какое выражение нужно для ToRadian? Есть одна функция. Зовут её ToRadian(). Сидела смирно пре смирно, но решила выделится при работе с камерой.
Конструкция виновника сия торжества#define ToRadian(x) ((x) * M_PI / 180.0f)
Код, на который бугуртится компилятор:void Matrix4f::InitRotateTransform(float RotateX, float RotateY, float RotateZ)
{
Matrix4f rx, ry, rz;
const float x = ToRadian(RotateX);
const float y = ToRadian(RotateY);
const float z = ToRadian(RotateZ);
rx.m[0][0] = 1.0f; rx.m[0][1] = 0.0f; rx.m[0][2] = 0.0f; rx.m[0][3] = 0.0f;
rx.m[1][0] = 0.0f; rx.m[1][1] = cosf(x); rx.m[1][2] = -sinf(x); rx.m[1][3] = 0.0f;
rx.m[2][0] = 0.0f; rx.m[2][1] = sinf(x); rx.m[2][2] = cosf(x); rx.m[2][3] = 0.0f;
rx.m[3][0] = 0.0f; rx.m[3][1] = 0.0f; rx.m[3][2] = 0.0f; rx.m[3][3] = 1.0f;
ry.m[0][0] = cosf(y); ry.m[0][1] = 0.0f; ry.m[0][2] = -sinf(y); ry.m[0][3] = 0.0f;
ry.m[1][0] = 0.0f; ry.m[1][1] = 1.0f; ry.m[1][2] = 0.0f; ry.m[1][3] = 0.0f;
ry.m[2][0] = sinf(y); ry.m[2][1] = 0.0f; ry.m[2][2] = cosf(y); ry.m[2][3] = 0.0f;
ry.m[3][0] = 0.0f; ry.m[3][1] = 0.0f; ry.m[3][2] = 0.0f; ry.m[3][3] = 1.0f;
rz.m[0][0] = cosf(z); rz.m[0][1] = -sinf(z); rz.m[0][2] = 0.0f; rz.m[0][3] = 0.0f;
rz.m[1][0] = sinf(z); rz.m[1][1] = cosf(z); rz.m[1][2] = 0.0f; rz.m[1][3] = 0.0f;
rz.m[2][0] = 0.0f; rz.m[2][1] = 0.0f; rz.m[2][2] = 1.0f; rz.m[2][3] = 0.0f;
rz.m[3][0] = 0.0f; rz.m[3][1] = 0.0f; rz.m[3][2] = 0.0f; rz.m[3][3] = 1.0f;
*this = rz * ry * rx;
}
Ладно бы, он написал чего ему надо. но он просто требует выражение, а какое не понятно. M_PI объявлен, так что он отпадает. Также при компиляции оно выдаёт синтаксическую ошибку:"=". Что надо сделать я не понимаю. Помогите

21 Авг 2019 в 06:16
202 +2
0
Ответы
1

Проблема в строке "this = rz ry * rx;". Вам нужно перегрузить оператор умножения для класса Matrix4f, чтобы он правильно перемножал матрицы. Ниже приведен пример перегрузки оператора умножения для класса Matrix4f:

Matrix4f operator*(const Matrix4f &lhs, const Matrix4f &rhs) {
Matrix4f result;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
result.m[i][j] = 0;
for (int k = 0; k < 4; k++) {
result.m[i][j] += lhs.m[i][k] * rhs.m[k][j];
}
}
}
return result;
}

Вызывайте эту функцию умножения матриц в вашем коде следующим образом:

*this = rz * ry * rx;

Используйте выражение ToRadian() для перевода градусов в радианы, как вы это уже сделали в своем коде.

20 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир