使用鼠标滚轮缩放不同的对象

时间:2013-12-25 19:37:25

标签: opengl glfw glm-math

我使用glfwglm

如果我向上滚动 - 我想让对象更大,当我向下滚动时 - 我想让对象更小。

怎么做? 我用这个函数来处理鼠标滚动。

static void mousescroll(GLFWwindow* window, double xoffset, double yoffset)
{
   if (yoffset > 0) { 
       scaler += yoffset * 0.01; //make it bigger than current size
       world = glm::scale(world, glm::vec3(scaler, scaler, scaler));
   }
   else {
       scaler -= yoffset * 0.01; //make it smaller than current size
       world = glm::scale(world, glm::vec3(scaler, scaler, scaler));
   }
}

默认情况下,scaler1.0

我可以像这样描述这个问题。

有一个对象。如果我向上滚动 - scaler的值将变为1.01。因此,对象在1.01次中会更大。当我再次向上滚动时 - 据我所知,在我的情况下,1.02中对象的大小将比之前的大小(在1.01次中大于原始大小)更大!但我希望它的大小比1.02次的原始大。

如何解决这个问题?

矩阵world看起来像这样

glm::mat4 world = glm::mat4(
glm::vec4(1.0f, 0.0f, 0.0f, 0.0f),
glm::vec4(0.0f, 1.0f, 0.0f, 0.0f),
glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f));

我计算着色器中顶点的位置

gl_Position = world * vec4(Position, 1.0);

1 个答案:

答案 0 :(得分:3)

  

但我希望它的尺寸​​比1.02倍的原始尺寸更大。

然后每次重置变换而不是累积比例:

world = glm::scale( scaler, scaler, scaler );