Я работаю над установкой 3D-рендеринга (все математические операции с GLM для OpenGL), и все работает правильно, за исключением того, как я предпочел бы, чтобы мои преобразования работали. создать матрицу для каждого объекта следующим образом:Направление вращения в GLM-матрице с использованием кватернионов
matrix = mat4(1);
vec3 scale = GetWorldScale();
vec3 pos = GetWorldPosition(); // Returns pos + parent->pos
quat rot = GetWorldRotationQuat(); // Returns parent->rot * rot
matrix = glm::translate(matrix, pos);
matrix *= mat4_cast(rot);
matrix = glm::scale(matrix, scale);
right = matrix[0].xyz;
up = matrix[1].xyz;
direction = matrix[2].xyz;
Используя это, как правило, работает правильно, за исключением того, что я не знаю, как настроить его часть для предпочтения. То есть, используя это, трансляция по оси X перевернута (например, левая положительна, а вперед положительна на оси Z, но я менее дискриминанта этого), и вращение по оси Y перевернуто.
Если посмотреть на другой код для этой цели, кажется, что многие отрицают то, что я использовал для направления (для камеры). Я тоже это сделал, и перевод правилен, но все оси вращения противоположны тому, что предпочтительнее (хотя вращение на X одинаково, наоборот, наоборот).
Я не совсем уверен, что я должен сделать, чтобы исправить это, за исключением, возможно, отрицательного перемещения по оси X и вращения по оси Y перед использованием, но я считаю, что это не лучший способ. Мысли?
хорошо, вы получили еще с кватернионами за один раз, чем я, через 2 года. –
Непонятно, что означают эти направления. Или что означают эти преобразования. Мир, вообще говоря, не имеет вращения. –
Gam: Ну, я тоже могу использовать эйлеры (мне еще предстоит понять/убедиться в преимуществах кватернионов, но они пригодны для использования). Nicol: Кажется, я понимаю, но вы знаете, что я имею в виду в том, как должна вести себя каждая ось. – babybluesedan