2011-09-03 109 views
3

我已經試過了3個小時來弄清楚如何使用Bezier曲線公式,glMap1f和glEvalCoord1f來創建曲線形狀。 (我基本上想創建the right of kirby)。如何在OpenGL中繪製2D不規則曲線形狀

但是,我已經取得了一些成功。當我使用glBegin(GL_LINE_STRIP)時,它跟蹤輪廓,但有一個很大的+(像你的x和y軸)。當我嘗試(GL_POLYGON)時,填充工作,但它有一個鑽石連接我使用的4點。

+3

你可以發表圖片顯示您的問題或描述再來一點 ?無法弄清楚你想達到什麼以及你得到什麼。鏈接不起作用。 – neodelphi

+1

與圖像鏈接中斷 –

+0

@VJo:圖像修復。 – genpfault

回答

0

我發現了什麼問題。原來我錯誤地使用了sizeof(array)。 (比較特別,參照下面的代碼,而不是使用i < numCurves,我天真試圖做i < sizeof(points)

因此,代替繪圖4-5分,我結束了繪製曲線192,導致奇怪的結果。中間的鑽石是由於沒有連接回到起點。對於誰願意做這個未來的人蔘考,下面的代碼:

錯誤的圖片:
Erroneous Picture http://img535.imageshack.us/img535/8207/failfd.png

最終產品:
Final Product http://img685.imageshack.us/img685/7641/finalsa.png

void drawIrregularPolygon(GLfloat points[][4][3], int numCurves) 
// REQUIRES: GLfloat points to be a polygon and center of circle to be current matrix 
// EFFECTS: An irregular shape would be drawn 
{ 
    for (int i = 0; i < numCurves; i++) 
    { 
     glMap1f(GL_MAP1_VERTEX_3, 0.0f, 1.0f, 3, 4, &points[i][0][0]); 
     glBegin(GL_POLYGON); //replace GL_POLYGON with GL_LINE_STRIP if you need outline 
     for (int j = 0; j <= TOTAL_SEGMENTS; j++) 
      glEvalCoord1f((GLfloat) j/TOTAL_SEGMENTS); 
     glVertex2f(points[0][0][0], points[0][0][1]); 
     glEnd(); 
    } 
}