2015-04-22 2 views
-1

Я программирую код, который когда пользователь нажимает на экран. Он отмечает точку и когда он продолжает нажимать на другие точки на экране. Это будет связывать точки с линиями.Мышь, меняющая экранную грань в OpenGL

Я не знаю, почему, но я работаю с двумя разными экранами. Когда я нажимаю мышью, он отмечает точку на экране, которую я вижу только тогда, когда я нажимаю левую кнопку мыши, и когда кнопка не нажата, я вижу чистый экран.

Мой код, который отмечает точки и соединить их с линиями:

void exerciseThree(int x, int y){ 
write("Exercise Three", -5, 18); 

float cx = 0, cy = 0; 

if(x != 0 && y != 0 && isFinished == false){ 
    glPushMatrix(); 
     glPointSize(6.0f); 
     //Draw the points 
     glBegin(GL_POINTS); 
      cx = ((x * (maxx - minx))/width) + minx; 
      cy = (((height - y) * (maxy - miny))/height) + miny; 
      glVertex2f(cx , cy); 
     glEnd(); 

     if(lastCx != 0 && lastCy != 0){ 
      glBegin(GL_LINE_STRIP); 
      glVertex2f(lastCx , lastCy); 
      glVertex2f(cx , cy); 
      glEnd();  
     } 

     lastCx = cx; 
     lastCy = cy;  
    glPopMatrix(); 
} 

write("Press 0 (zero) to come back.", -10, -18); 
} 

Функция мыши:

void mouse(int button, int state, int x, int y){ 
switch(button){ 
     case GLUT_LEFT_BUTTON: 
      if(option == 3){ 
       exerciseThree(x, y); 
       projecao(); 
       glutSwapBuffers(); 
      } 

     break;   
}  
} 

Я знаю, что я должен обращаться с GLUT_DOWN и GLUT_UP мыши, но делает существует способ работы только с одним экраном?

+0

Я заметил, что экран, который появляется, когда левая кнопка нажата последний экран, я был –

ответ

1

Вы видите только что-то на экране, когда вы нажимаете, потому что это единственный раз, когда вы рисуете и обновляете буфер. Вы должны просто обновить список координат x/y при щелчке мышью. Однако вы должны нарисовать точки и называть glutSwapBuffers() каждый раз в своем основном цикле, чтобы они всегда были на экране, независимо от нажатия кнопки.

Поток должен быть чем-то вроде следующего псевдо код:

ArrayOfPoints[]; 

while(Running) 
{ 
    CheckForMouseInput(); // Update array of points to draw if pressed 

    DrawPoints(); // Use same code draw code from exerciseThree() 

    glutSwapBuffers(); // Update video buffer 
}