У меня есть объект, который я сначала хочу повернуть (о его собственном центре), а затем перевести его в какой-то момент. У меня есть glm :: quat, который содержит поворот и glm :: vec3, который содержит точку, к которой он должен быть переведен.glm comb rotation and translation
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Тогда в моей визуализации функции я делаю ..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
..и делают ...
К сожалению объект только вращается вокруг начала координат, когда я применяю вращение (чем дальше «позиция» от начала координат, тем больше орбита).
Когда я применяю только то положение, которое он переводит отлично. Когда я применяю только поворот, он остается в начале координат и вращается вокруг его центра (как и ожидалось). Так почему же это странно, когда я их применяю? Я что-то пропустил?
У меня создалось впечатление, что glm :: translate применяет перевод к 1-му аргументу функции. Спасибо. – Jubei
@Jubei: Он * делает * применяет перевод к матрице. Он правильно умножает его. Это означает, что перевод происходит * сначала *, когда вы хотите, чтобы ротация была первой. –
Спасибо за этот ответ, я сегодня застрял в этом, но хотя я и понял, что я делаю неправильно, я просто не мог найти подтверждения, что так работают функции. –