如何在其位置缩放矩形
How to scale a rectangle at its position
我正在绘制一个矩形,当我对其进行缩放时,该矩形开始向屏幕中心移动。
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);
这似乎是正确的行为。对于你想要的,你需要首先将你的对象完美地置于原点 (0,0,0) 的中心。您的模型转换必须按此顺序应用,首先将其以原点为中心,首先围绕该原点进行缩放和旋转,然后进行平移。本质上,这些是您要对对象(对象 space,也称为模型转换)执行的转换步骤的顺序。
我正在绘制一个矩形,当我对其进行缩放时,该矩形开始向屏幕中心移动。
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);
这似乎是正确的行为。对于你想要的,你需要首先将你的对象完美地置于原点 (0,0,0) 的中心。您的模型转换必须按此顺序应用,首先将其以原点为中心,首先围绕该原点进行缩放和旋转,然后进行平移。本质上,这些是您要对对象(对象 space,也称为模型转换)执行的转换步骤的顺序。