gpt4 book ai didi

opengl - OpenGL : Error moving object using keyboard

转载 作者:行者123 更新时间:2023-12-02 10:55:07 24 4
gpt4 key购买 nike

我是OpenGL的新手,正在尝试绘制火柴人,然后使用键盘上的箭头键将其移动。
我的想法是为stickman使用全局变量,并在按下某个键时对其进行更改。然后,再次调用绘图功能(myDisplay())。
不幸的是,我总是收到以下错误消息:
“错误10错误C2371:'myDisplay':重新定义;不同的基本类型”
如某些教程中所建议的,当我用glutPostRedisplay()替换键盘功能中的myDisplay()调用时,我看到错误消息消失了,并且构建成功。但是当按下琴键时火柴人不会动。

这是我的代码:

#include <GL/glut.h>

GLint x; GLint y; GLint d; //parameters for the stickman

void myKeyboard(unsigned char key, int mx, int my) {
int x1 = mx;
int y1 = 480 - my;

switch(key){
case GLUT_KEY_LEFT :
x = x-50;
myDisplay();
break;
case 'E' :
exit(-1);
break;
default:
break;
}
}


void stickman () {
glBegin(GL_LINES); //body
glVertex2i(x, y);
glVertex2i(x, y-2*d);
glVertex2i(x-d, y-d);
glVertex2i(x+d, y-d);
glVertex2i(x, y-2*d);
glVertex2i(x-d, y-3*d);
glVertex2i(x, y-2*d);
glVertex2i(x+d, y-3*d);
glEnd();

glBegin(GL_LINE_LOOP); //head
glVertex2i(x,y);
glVertex2i(x+0.5*d, y);
glVertex2i(x+0.5*d, y+0.5*d);
glVertex2i(x-0.5*d, y+0.5*d);
glVertex2i(x-0.5*d, y);
glEnd();
}


void myDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);

stickman();

glFlush();
}

void myInit() {
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

void main(int argc, char** argv) {
x = 320;
y = 350;
d = 100;

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(200, 50);
glutCreateWindow("Stickman");
glutDisplayFunc(myDisplay);
glutKeyboardFunc(myKeyboard);
glutPostRedisplay();
myInit();
glutMainLoop();
}

最佳答案

我发现(GLUT Keyboard Tutorial)的问题不是图片的重绘,而是无法识别左箭头键。
我需要为特殊键(如箭头键)编写另一个键盘功能。

现在我的代码看起来像这样,它可以工作:

void processNormalKeys (unsigned char key, int mx, int my) {
if (key == 'E')
exit(-1);
}

void processSpecialKeys (int key, int mx, int my) {
switch(key){
case GLUT_KEY_LEFT :
x = x-5;
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT :
x = x+5;
glutPostRedisplay();
break;
case GLUT_KEY_UP :
y = y+5;
glutPostRedisplay();
break;
case GLUT_KEY_DOWN :
y = y-5;
glutPostRedisplay();
break;
default:
break;
}
}

我还必须调整主要功能:
glutKeyboardFunc(processNormalKeys);
glutSpecialFunc(processSpecialKeys);

但是无论如何,谢谢您的帮助!

关于opengl - OpenGL : Error moving object using keyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604918/

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