C++ 两点移动不起作用

C++ 两点移动不起作用,c++,visual-studio-2010,opengl,graphics,C++,Visual Studio 2010,Opengl,Graphics,这里我有两个点,一个是固定的,另一个是通过鼠标点击改变的,我希望固定点向移动点移动,并在输出中显示其移动。直到现在,固定点(黄色)没有移动到红色 #include <iostream> #include <stdlib.h> //Needed for "exit" function //Include OpenGL header files, so that we can use OpenGL #include <glut.h>

这里我有两个点,一个是固定的,另一个是通过鼠标点击改变的,我希望固定点向移动点移动,并在输出中显示其移动。直到现在,固定点(黄色)没有移动到红色

   #include <iostream>
   #include <stdlib.h> //Needed for "exit" function
   //Include OpenGL header files, so that we can use OpenGL
   #include <glut.h>
   using namespace std;
    void init();
   void display();
   float a = 200.0, b= 200.0;
   void setPoint(float x, float y){
   glColor3f(1.0, 0.0, 0.0);  //drawing object
   glBegin(GL_POINTS);
   glVertex2f(x,y);
   glEnd();

   }
  int m=50;
  int n=50;
  void setPoint2(int m,int n){
  glColor3f(1.0, 1.0, 0.0);  //drawing object
  glBegin(GL_POINTS);
  glVertex2f(m,n);
  glEnd();
   }

 void init(){
 glClearColor(1.0,1.0,1.0,1.0);
 gluOrtho2D(0.0, 400.0, 0.0, 300.0);
   }
 void display(){
  glClear( GL_COLOR_BUFFER_BIT);   //defult point
  glPointSize(10.0);
  setPoint(a,b);
  setPoint2(m,n);
  glFlush();
  }
  void update(){
while(a!=m || b!=n){
if(a>m&&b>n)
{
    m++;
    n++;
    setPoint2(m,n);

}
else if(a>m&&b<n)
{
    m++;
    n--;
    setPoint2(m,n);

}
else if(a<m&&b>n)
{
    m--;
    n++;
    setPoint2(m,n);

}
else  if(a<m&&b<n)
{
    m--;
    n--;
    setPoint2(m,n);

}

    //  glTranslatef(m,n,0);    
}


    }
    void mouse(int mouse, int state, int x, int y){
    switch(mouse){
    case GLUT_LEFT_BUTTON:
    if(state == GLUT_DOWN){
    cout << x << " -> " << y << endl;

    /*a=x;
    b=y;*/
    a = x/1.0;
    b = 300.0 - (y/1.0);

   glutPostRedisplay();

  }
 break;

   }

  }
  int main(int argc, char* argv[]){
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  glutInitWindowSize(400,300);
  glutInitWindowPosition(200,100);
  glutCreateWindow("OpenGL Program");
  init();
  glutDisplayFunc(display);
  glutMouseFunc(mouse);
 //glutTimerFunc(25,update, 0); //Add a timer
 glutMainLoop();
      return 0;
     }
#包括
#包含//退出功能所需
//包括OpenGL头文件,以便我们可以使用OpenGL
#包括
使用名称空间std;
void init();
void display();
浮点数a=200.0,b=200.0;
无效设定点(浮动x、浮动y){
glColor3f(1.0,0.0,0.0);//图形对象
glBegin(总分);
glVertex2f(x,y);
格伦德();
}
int m=50;
int n=50;
无效设定点2(int m,int n){
glColor3f(1.0,1.0,0.0);//图形对象
glBegin(总分);
glVertex2f(m,n);
格伦德();
}
void init(){
glClearColor(1.0,1.0,1.0,1.0);
gluOrtho2D(0.0400.0,0.0300.0);
}
无效显示(){
glClear(GL_颜色_缓冲区_位);//默认点
glPointSize(10.0);
设定点(a,b);
设定点2(m,n);
glFlush();
}
无效更新(){
而(a!=m | b!=n){
如果(a>m&&b>n)
{
m++;
n++;
设定点2(m,n);
}

否则,如果(a>m&&b这里最明显的两个问题是,您似乎实际上没有任何东西调用更新函数,如果您调用了,您的移动代码专门用于进行对角线移动,因此如果点位于水平或垂直线上,它们将不会移动

我已经有一段时间没有使用GLUT了,但我认为通常要做的事情是将update()逻辑放入“idle”回调中,并在回调结束时执行
GLUTPOSTREDIDISPLAY()


除此之外,使用如此多的全局变量,尤其是名为全局变量的单个字符(其名称反映函数参数的名称)令人非常困惑。

我建议以后的问题,你可以提问,讨论你尝试过的各种事情,调试时看到的情况,而不是一下子发布一堆代码。@Rob I我是openGl和本网站的初学者..谢谢:)我将添加我在调试中看到的内容