2015-10-12 43 views
-1

我一直在做一個星期的作業,現在似乎無法弄清楚。OpenGl ---使用左鍵和右鍵單擊連接點

分配的要點是在您點擊左鍵時連接圖上的點。當你點擊右鍵時你提出了一個觀點,但它沒有連接到最後一點(它是獨奏的,獨立的)。當你再次點擊左邊的按鈕時,它應該連接到你所做的最後一個點。我的點擊有效,但連接不好。該方案低於..

glBegin(GL_LINES); 
for (int i=0 ; i<= numberPoints;i++) 
    for(int j =0; j<=numberEdges; j++) 
     { 
     glVertex2fv(points[edges[i][0]]); 
     glVertex2fv(points[edges[i][1]]); 
     } 
glEnd(); 

//這是個

glBegin(GL_POINTS); 
    for(int i = 0 ; i<numberPoints; i++) 
    { 
     glVertex2fv(points[i]); 
    } 
    glEnd(); 


// This is the left click 
switch(button) 
{ 

case GLUT_LEFT_BUTTON: 
    if(state==GLUT_DOWN) 
    { 

     points[numberPoints][0] = plotX; 
     points[numberPoints][1] = plotY; 


     previousPointSubscript = numberPoints; 
     edges[numberEdges][0] = previousPointSubscript; 
     edges[numberEdges][1] = numberPoints; 


     numberEdges++; 
     numberPoints++; 
      glutPostRedisplay();  
       glFlush(); 
    } 
      break; 
    case GLUT_RIGHT_BUTTON: 
     if(state==GLUT_DOWN) 
     { 
      points[numberPoints][0] = plotX; 
      points[numberPoints][1] = plotY; 



      numberPoints++; 


     } 
    glutPostRedisplay();  
    glFlush(); 
     break; 


} 
+0

看起來像缺少部分代碼。但一個顯而易見的問題是,你將'edges'中每個條目的開始和結束點設置爲相同的值('numberPoints')。 'previousPointSubscript'與'numberPoints'的值相同,您可以在其中對'edges'條目進行賦值。 –

+0

我如何向您發送整個代碼,以便您可以看到該問題。至於previousPointSubscript和numberPoints是相同的不是最後一點連接到新的點。 –

+0

如果一條線的起點和終點相同,則線退化爲一個點。您可能希望在調試器中逐步完成整個任務,或者添加一些日誌記錄,以便您可以跟蹤代碼的執行情況,並查看它與預期邏輯不匹配的位置。 –

回答

0

我得到了它finallyyy!好的我所做的就是取GL_LINE,只有一個for變量i的循環。然後在左側單擊我翻轉邊緣0和邊緣1等於左右。所以邊0是numberPoints,邊1是previousPointsSubscript。然後我將previousPointsSubscript = numberPoints行放在兩條邊後面。這給了我連線的每一個點。

if(numberPoints>1) 
{ 
    glBegin(GL_LINES); 
for (int i=0 ; i<numberEdges;i++) 
    { 
     glVertex2fv(points[edges[i][0]]); 
     glVertex2fv(points[edges[i][1]]); 
    } 
} 
glEnd(); 


case GLUT_LEFT_BUTTON: 
    if(state==GLUT_DOWN) 
    { 

     points[numberPoints][0] = plotX; 
     points[numberPoints][1] = plotY; 



     edges[numberEdges][0] = numberPoints; 
     edges[numberEdges][1] = previousPointSubscript; 
     previousPointSubscript = numberPoints; 

     numberEdges++; 
     numberPoints++; 
      glutPostRedisplay();  
       glFlush(); 
    } 

至於是右鍵我已經有了它通過自身繪製點,因此所有我需要做的就是添加previousPointSubscript = numberPoints;點下,當左鍵點擊是,將連接線。如果你有問題打我。