【问题标题】:OpenGL object not scaling properlyOpenGL 对象没有正确缩放
【发布时间】:2021-07-29 22:31:01
【问题描述】:

我想用模型矩阵缩放一个三角形。我有这个代码:

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(triangle should be at the center)
我不知道是什么原因造成的,也许它与订单有关。 我真的很感激一些帮助。
我的顶点着色器:

#version 410 core

layout(location = 0) in vec4 position;

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

【问题讨论】:

  • 为什么设置mModel然后覆盖呢?在第一种情况下,比例被覆盖,在第二种情况下,翻译被覆盖。最有可能的是,翻译会将模型移出视野。
  • 如何在不覆盖的情况下设置 mModel 的比例和平移?

标签: c++ matrix opengl transform glm-math


【解决方案1】:

glm::scaleglm::translate 的第一个参数是输入矩阵。这些函数定义一个矩阵并将输入矩阵乘以新指定的矩阵。 在这两种情况下,您都为 inout 矩阵指定 Identity matrix (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)

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多