有关opengl glfwGetKey函数重复调用问题

如题,最近刚开始用glfw+glad开发opengl,想用WSAD控制模型的移动,每按一次移动一步。我是利用矩阵平移来传递参数的,在用glfwGetKey函数进行键盘调用时,

void processInput(GLFWwindow *window)
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
	if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
		updown += 0.15;
	if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
		updown -= 0.15;
	if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
		leftright -= 0.15;
	if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
		leftright += 0.15;
}

每按一下,模型一直在移动,上网查了一下说可以利用回调函数解决,然而我在写了回调函数后还是一样的情况。反复思考,左右横跳,突然找到了问题所在:

        trans = glm::translate(trans, glm::vec3(leftright, updown, 0));

		unsigned int transformLoc = glGetUniformLocation(shaderProgram, "transform");
		glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));

		glUseProgram(shaderProgram);
		// render the triangle
		glBindVertexArray(VAO);
		glDrawElements(GL_TRIANGLES, f_num, GL_UNSIGNED_INT, 0);

		// 每次绘制一次
		updown = 0;
		leftright = 0;

因为之前updown和leftright有值后,每次窗口绘制都会进行矩阵平移,而窗口是在不停调用的,所以模型会不断平移。因此,我们只需在每次绘制结束时把updown和leftright值重新赋成0就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值