OpenGL을 처음 사용하기 때문에 키보드의 화살표 키를 사용하여 막대기를 페인트하려고합니다. 내 생각은 stickman에 전역 변수를 사용하고 특정 키를 눌렀을 때 변수를 변경하는 것이었다. 그 후 draw-function (myDisplay())이 다시 호출됩니다. 불행히도 나는 항상 다음과 같은 오류 메시지가 나타납니다 : "오류 10 오류 C2371 : 'myDisplay': 재정의, 다른 기본 유형" myDisplay()를 대체 할 때 키보드 기능에서 glutPostRedisplay()를 일부 자습서 오류 메시지가 사라지고 빌드가 성공적으로 완료되었습니다. 그러나 키를 누르면 막대기가 움직이지 않습니다. 현재 창은 문서에 말했듯이 다시 표시 될 필요가 있다고 마크에게OpenGL : 키보드를 사용하여 오브젝트를 이동하는 중에 오류가 발생했습니다.
#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();
}
귀하의 제안을 시도했지만 여전히 작동하지 않습니다. – CGFoX