2016-01-18 176 views
-4

我是初學者,在開放式GL和我的代碼中,當狀態爲3代碼工作正常,但狀態爲1時,它不能畫線。我想用線連接兩點。 請幫助我如何修復我的if(status==1)聲明畫出一條線。 這是我的代碼:在OpenGL爲什麼我的drawpoint功能不能正常工作?

void myMouse(int button, int state, int x, int y) 
    { 
     if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) 
     { 
      if (((x>=30 && x<=70) && ((wh-y)>=400 && (wh-y)<=440))) 
       status=1;//draw line 
      else if((x>=30 && x<=70) && ((wh-y)>=280 && (wh-y)<=320)) 
       status=2; 
      else if((x>=30 && x<=70) && ((wh-y)>=520 && (wh-y)<=560)) 
       status=3;//clear page 
      else if((x>=30 && x<=70) && ((wh-y)>=160 && (wh-y)<=200)) 
       status=4; 
      else if((x>=30 && x<=70) && ((wh-y)>=40 && (wh-y)<=80)) 
       status=5; 
      else drawPoint(x,y); 
     } 
    } 
void drawPoint(int x,int y) 
{ 
     if(status==1) 
     { 
      glBegin(GL_LINES); 
      glVertex2i(x,y); 
      //glVertex2i(x,y); 
      glEnd(); 
      glFlush(); 
     } 

     if(status==3){ 
      glClear(GL_COLOR_BUFFER_BIT); 
      glFlush(); 
     } 

     else{ 
     y=wh-y; 
     glBegin(GL_POINTS); 
     glVertex2i(x,y); 
     glEnd(); 
     glFlush();} 
} 
+0

如果問題不明確,請先評論。如果它已經不是很清楚,那就給減點!!!! – amIllusionist

+0

「我的功能不好」不是一個可接受的科學問題陳述。 –

+1

您只爲該行指定一個頂點。一條線需要兩個頂點。 –

回答

1

您還可以檢查功能myMouse()中的狀態條件。那麼你可以得到新的點並將它們存儲在二維數組中。 如果您將x和y存儲在數組中,則可以訪問先前的點,然後可以繪製一條線。

if(status==1) 
     { 
      glBegin(GL_LINES); 
      glVertex2i(arrx[i],arry[j]); 
      glVertex2i(arrx[I-1],arry[j-1]); 
      glEnd(); 
      glFlush(); 
     } 
0

默認可見範圍是從[-1至1]在每個軸上。它看起來好像x和y是在像素座標中指定的,這要求您使用投影矩陣(最可能是正交矩陣)。代碼將看起來像這樣:

glMatrixMode(GL_PROJECTION); 
glOrtho(0, width, height, 0, 0, 1); 

此外,你仍然需要第二個點的線(正如Reto Koradi告訴)。我不知道這是否是有意的,但其他分支也將在狀態爲1時執行。