我使用glfw
和glm
。
如果我向上滚动 - 我想让对象更大,当我向下滚动时 - 我想让对象更小。
怎么做? 我用这个函数来处理鼠标滚动。
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));
}
}
默认情况下,scaler
为1.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);
答案 0 :(得分:3)
但我希望它的尺寸比1.02倍的原始尺寸更大。
然后每次重置变换而不是累积比例:
world = glm::scale( scaler, scaler, scaler );