0
我試圖調用一個函數,只有當「空格鍵」被按下時。其關鍵代碼是32.glutKeyboardFunc調用函數不起作用
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <cmath>
#include <iostream>
#include <string.h>
using namespace std;
GLuint window, View1;
void Display_Mid_Ellipse()
{
double xc=0.0, yc=0.0, rx=140.0, ry=200.0;
double rxSq = rx * rx;
double rySq = ry * ry;
double x = 0, y = ry, p;
double px = 0, py = 2 * rxSq * y;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1 ,0, 0);
glBegin(GL_POINTS);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
p = rySq - (rxSq * ry) + (0.25 * rxSq);
while (px < py)
{
x++;
px = px + 2 * rySq;
if (p < 0)
p = p + rySq + px;
else
{
y--;
py = py - 2 * rxSq;
p = p + rySq + px - py;
}
glBegin(GL_POINTS);
glVertex2d(xc+x,yc+y);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
}
p = rySq*(x+0.5)*(x+0.5) + rxSq*(y-1)*(y-1) - rxSq*rySq;
while (y > 0)
{
y--;
py = py - 2 * rxSq;
if (p > 0)
p = p + rxSq - py;
else
{
x++;
px = px + 2 * rySq;
p = p + rxSq - py + px;
}
glBegin(GL_POINTS);
glVertex2d(xc+x,yc+y);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
glFlush();
}
} //end_MIDPOINT_ELLIPSE
void init() {
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.3,0.3,0.3,0.7);
gluOrtho2D(-500.0,500.0,-500.0,500.0);
}
void View1Display()
{
glutSetWindow(View1);
gluOrtho2D(-500.0,500.0,-500.0,500.0);
Display_Mid_Ellipse();
}
void Display()
{
glutSetWindow(window);
glClear(GL_COLOR_BUFFER_BIT);
//View1Display();
}
void keyFunc(unsigned char ch, int x, int y){
if(ch==32){
View1Display();
}
}
int main (int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(750, 750);
glutInitWindowPosition(0, 0);
window=glutCreateWindow("Circle and ellipse");
init();
View1 = glutCreateSubWindow(window,20,40, 340,340);
glutDisplayFunc(Display);
glutKeyboardFunc(keyFunc);
glutMainLoop();
return 0;
}
當我從Display()函數調用相同的View1Display時,它工作正常。 我很困惑。我嘗試了可能的替代方案,但無法找到解決方案。請幫忙。 感謝