Объект OpenGL не масштабируется должным образом

Я хочу масштабировать треугольник с помощью матрицы модели. У меня есть этот код:

void Triangle::UpdateTransform()
{
    
    mView = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f));
    mModel = glm::scale(glm::mat4(1.0f), glm::vec3(2.f));
    mModel = glm::translate(glm::mat4(1.0f), mLocation);
    mMVP = mProj*mView*mModel;
}

С этим кодом я не получаю никаких результатов.
Но если я изменю порядок шкалы и перевода:

    mView = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f));
    mModel = glm::translate(glm::mat4(1.0f), mLocation);
    mModel = glm::scale(glm::mat4(1.0f), glm::vec3(2.f));
    mMVP = mProj*mView*mModel;

Я получаю очень странный результат: result(треугольник должен быть в центре)
Я понятия не имею, с чем это связано, возможно, это как-то связано с заказами. Буду очень признателен за помощь.
Мой вершинный шейдер:

#version 410 core

layout(location = 0) in vec4 position;

uniform mat4 u_MVP;
void main()
{
    gl_Position = u_MVP * position;
};

person Uytab    schedule 07.05.2021    source источник
comment
Почему вы устанавливаете mModel, а затем перезаписываете его? В первом случае масштаб перезаписывается, а во втором случае перезаписывается перевод. Скорее всего, перевод уберет модель из поля зрения.   -  person Rabbid76    schedule 07.05.2021
comment
Как я могу установить масштаб и перевод mModel без перезаписи?   -  person Uytab    schedule 07.05.2021


Ответы (1)


Первый аргумент glm::scale и glm::translate — это входная матрица. Эти функции определяют матрицу и умножают входную матрицу на вновь заданную матрицу. В обоих случаях вы указываете матрицу идентификации (glm::mat4(1.0f)) для входной матрицы. Вы должны передать mModel в качестве входной матрицы. например.:

mModel = glm::translate(glm::mat4(1.0f), mLocation);
mModel = glm::scale(mModel, glm::vec3(2.f));  // <-- mModel instead of glm::mat4(1.0f)
person Rabbid76    schedule 07.05.2021