gpt4 book ai didi

c - GLUT键盘功能怎么写?

转载 作者:行者123 更新时间:2023-12-04 12:29:30 26 4
gpt4 key购买 nike

我写了下面的代码,但是在运行时,当我按键时,程序不起作用。
我想编写一个程序,当用户按下 right_keyalt_key 时绘制一个三角形。但这根本行不通。它总是显示黑屏。

#include <GL/glut.h>
void init (void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,200.0,0.0,200.0);
}
float red=1,green=1,blue=1;
void processSpecialKeys(int key, int x, int y) {
if(key=='0')
exit(0);
int mod;
if(key== GLUT_KEY_RIGHT) {
mod = glutGetModifiers();
if (mod==GLUT_ACTIVE_ALT) {
red = 1.0; green = 0.0; blue = 0.0;
glColor3f(red,green,blue);
glBegin(GL_TRIANGLES);
glVertex2f(0,0);
glVertex2f(0,100);
glVertex2f(50,100);
glEnd();
}
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(50,20);
glutInitWindowSize(400, 300);
glutCreateWindow("A simple example");
init();
glutDisplayFunc(display);
glutSpecialFunc(processSpecialKeys);
glutMainLoop();
}

最佳答案

好的,它现在可以工作了。我已修改您的代码以启用 ALT 或 SHIFT 或 CTRL。该代码打印出按键的扫描码。要打印 ALT、CTRL 或 SHIFT 扫描码,只需按下 ALT 或 SHIFT 或 CTRL 与其他键组合。否则 GLUT 不会注册它。

#include <stdio.h>
#include <GL/glut.h>

float red=1,green=1,blue=1;



void init (void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,200.0,0.0,200.0);
}


void process_SHIFT_ALT_CTRL(unsigned char key, int x, int y)
{
// Press ALT or SHIFT or CTRL in combination with other keys.
printf("key_code =%d \n",key);

int mod = glutGetModifiers();

if (mod != 0) //ALT=4 SHIFT=1 CTRL=2
{
switch(mod)
{
case 1 : printf("SHIFT key %d\n",mod); break;
case 2 : printf("CTRL key %d\n",mod); break;
case 4 : printf("ALT key %d\n",mod); break;
mod=0;
}
}
}


void process_Normal_Keys(int key, int x, int y)
{
switch (key)
{
case 27 : break;
case 100 : printf("GLUT_KEY_LEFT %d\n",key); break;
case 102: printf("GLUT_KEY_RIGHT %d\n",key); ; break;
case 101 : printf("GLUT_KEY_UP %d\n",key); ; break;
case 103 : printf("GLUT_KEY_DOWN %d\n",key); ; break;
}

}


void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glFlush();
}


int main(int argc, char **argv)
{

printf("Press ALT or SHIFT or CTRL in combination with other keys. \n\n");

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(800,20);
glutInitWindowSize(400, 300);
glutCreateWindow("A simple example");
init();

// famous GLUT callback functions

glutDisplayFunc(display);


glutSpecialFunc( process_Normal_Keys );
glutKeyboardFunc( process_SHIFT_ALT_CTRL );


glutMainLoop();

return 0;
}

关于c - GLUT键盘功能怎么写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629172/

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