如何在其位置缩放矩形

问题描述 投票:0回答:1

我正在绘制一个矩形,当我缩放它时,该矩形开始向屏幕中心移动。

float vertices[] = {
         10.0f,  5.5f, 1.0f, 0.0 , 0.0,  // top right
         10.0f, 0.0f, 1.0f, 0.0 , 0.0,  // bottom right
         5.0f, 0.0f, 1.0f, 0.0 , 0.0,  // bottom left
         5.0f, 5.5f, 1.0f , 0.0 , 0.0  // top left 
    };

    unsigned int indices[] = {  // note that we start from 0!
        0, 1, 3,  // first Triangle
        1, 2, 3   // second Triangle
    };

来自绘图功能的代码。

    glm::mat4 model = glm::mat4(1.0f);      
    glm::mat4 view = camera1.GetViewMatrix();
    glm::mat4 projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);
   shader.setMat4("model", model);
   model = glm::scale(model, glm::vec3(0.2f, 0.2f, 0.2f));
   shader.setMat4("model", model);
   glBindVertexArray(VAO);
   glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
   glBindVertexArray(0);

顶点着色器中的矩阵乘法

gl_Position =   projection * view * model * vec4(aPos , 1.0 );

我如何缩放矩形而不将其移向中心?

我尝试先将对象居中,然后应用变换。

model = glm::translate(model, glm::vec3(-7.75, 0.0, 0.0));
        model = glm::scale(model, glm::vec3(0.2f, 0.2f, 0.2f));
        model = glm::translate(model, glm::vec3(7.75, 0.0, 0.0));
        shader.setMat4("model", model);
        glBindVertexArray(VAO);
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
        glBindVertexArray(0);
c++ opengl glm-math
1个回答
1
投票

这似乎是正确的行为。对于所需的内容,首先需要将对象完美地定在原点(0,0,0)处。您必须按照此顺序应用模型转换,首先将其放在原点居中,然后首先围绕该原点进行缩放和旋转,然后再进行平移。本质上,这些是您要对对象执行的转换步骤的顺序(对象空间,也称为模型转换)。

© www.soinside.com 2019 - 2024. All rights reserved.