openGL中使用GLFW库键盘按键不响应

本文档详细介绍了在使用OpenGL时遇到的键盘事件不响应的故障,问题出现在glfw库的事件回调函数中。错误地使用了赋值操作符‘==’导致键盘事件无法正常工作。修正代码为正确使用赋值操作符‘=’,使得键盘输入如WSAD等能够得到正确响应。通过修改回调函数,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

openGL系列文章目录

前言

Gouraud 着色也容易受到其他伪影影响。如果镜面高光整个范围都在模型中的一个三角
形内——即高光范围内一个模型顶点也没有——那么它可能不会被渲染出来。由于镜面反射
分量是依顶点计算的,因此,当模型所有顶点都没有镜面反射分量时,其光栅化后的像素
也不会有镜面反射光。

一、openGL键盘事件不响应

二、解决步骤

1.glfw库事件响应回调函数

glfwSetKeyCallback(window, key_press_callback);

void key_press_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
	if ((key == GLFW_KEY_ESCAPE) && (action == GLFW_PRESS))
	{
		glfwSetWindowShouldClose(window, GL_TRUE);
	}
	if (action == GLFW_PRESS)
	{
		keys[key] == GLFW_TRUE;  //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
	}
	else if (action == GLFW_RELEASE)
	{
		keys[key] == GLFW_FALSE;    //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
	}
}

修改

void key_press_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
	if ((key == GLFW_KEY_ESCAPE) && (action == GLFW_PRESS))
	{
		glfwSetWindowShouldClose(window, GL_TRUE);
	}
	if (action == GLFW_PRESS)
	{
		keys[key] = GLFW_TRUE;  //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
	}
	else if (action == GLFW_RELEASE)
	{
		keys[key] = GLFW_FALSE;    //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
	}
}

错误原因


keys[key] == GLFW_TRUE;
keys[key] = GLFW_FALSE;
改成
keys[key] = GLFW_TRUE;
keys[key] = GLFW_FALSE;

运行结果

在这里插入图片描述

源码下载

源码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值