gpt4 book ai didi

c - 在 Solar Systems OpenGL 程序中实现箭头键

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:21 24 4
gpt4 key购买 nike

作为我的太阳系计划的一部分,一切都很好地实现了,我试图扩展我的计划以包括用户可以绕着 orrey 飞行,或者换句话说,通过使用方向键。这就是我基本上所做的:

   void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27: /* Escape key */
exit(0);
break;
case (GLUT_KEY_LEFT): lon += TURN_ANGLE;
if(lon == 360)
lon = 0;
break;
case (GLUT_KEY_RIGHT):
lon -= TURN_ANGLE;
if(lon == -360)
lon = 0;
break;
case (GLUT_KEY_PAGE_UP):
if(lat + TURN_ANGLE <= 90)
lat += TURN_ANGLE;
break;
case (GLUT_KEY_UP): eyex += sin(DEG_TO_RAD * (lon)) * RUN_SPEED;
eyez += cos(DEG_TO_RAD * (lon)) * RUN_SPEED;
break;
case (GLUT_KEY_DOWN): eyex -= sin(DEG_TO_RAD * (lon)) * RUN_SPEED;
eyez -= cos(DEG_TO_RAD * (lon)) * RUN_SPEED;
break;
default: break;


}
}

其中latlon是与当前视点一起使用的全局角度(eyex, eyey, eyez), 和RUN_SPEED 在 XZ 平面中步进的距离。我不知道为什么这部分不起作用,即使我在这部分所有编译文件中都没有收到任何错误,但箭头键不起作用。有什么帮助吗?

最佳答案

使用 glutKeyboardFunc() 您只能捕获简单的 ASCII 字母,为了响应您需要设置单独事件处理程序的其余键:glutSpecialFunc() .

请注意,特殊处理程序的签名发生了一些变化:

void special(int key, int x, int y)
{
switch (key)
{
case GLUT_KEY_LEFT: lon += TURN_ANGLE;
if(lon == 360)
lon = 0;
break;
/* ... */
default: break;
}
}

请记住,这个特殊处理程序不会取代您一直在使用的键盘处理程序,它只是对其进行补充。

关于c - 在 Solar Systems OpenGL 程序中实现箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10236262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com