2011-06-02 26 views
0

私は何も描画しない次のコードを持っています。 私はglBegin(GL_POINTS)を使うと円を描画しますが、ポリゴンモードで描画しません。OpenGL正多角形

int WXSIZE=500,WYSIZE=500; 

//Coordinate system 
float Xmin=-8, Xmax=8, Ymin=-8, Ymax=8; 

void setupmywindow() 
{ 
    glClearColor(0,0,0,0); 
    gluOrtho2D(Xmin, Xmax, Ymin, Ymax); 
} 


void mypolygon(float radius) //test object 
{ 

    glColor3f(1,0,0); 
    int numPoints=20; 
    float x,y; 
    float centerx,centery=0; 

    for (int i = 0; i < numPoints; i++) 
{ 
    x = centerx + radius * sin(2.0*PI*i/numPoints); 
    y = centery + radius * cos(2.0*PI*i/numPoints); 

    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 
    glBegin(GL_POLYGON); 
    glVertex2f(x, y); 
    glEnd(); 

} 

} 


void myDisplay() 
//single object 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    mypolygon(2.0); 
    glutSwapBuffers(); 
} 


int main(int argc, char **argv) 
{ 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); 
    glutInitWindowSize(WXSIZE,WYSIZE); 
    glutCreateWindow("My graphic window"); 
    setupmywindow(); 
    glutDisplayFunc(myDisplay); 
    glutMainLoop(); 
} 

お勧めはありますか?

EDIT ----------------------

glBegin(GL_POLYGON); 

    for (int i = 0; i < numPoints; i++) 
{ 
    x = centerx + radius * sin(2.0*PI*i/numPoints); 
    y = centery + radius * cos(2.0*PI*i/numPoints); 

    glVertex2f(x, y); 

} 
    glEnd(); 

私はループでそれを台無し。

+0

タイトルは、バック – leonbloy

+0

@Christianラウそれを変更してくださいということ:私はあなたの答えを見now.It 7分前に答えて、私は9分のago.Itは、私がいた時間だったに違いない編集したと言いますあなたの答えは私のものと同じですから、私はそれを受け入れます。しかし、本当に私はあなたの答えを見ていませんでした – George

答えて

4

すべてのループで、ポリゴンを描画しています。ポリゴンは1つの頂点から構成されているため、何も表示されません。 glBegin/glEnd(とglPolygonMode)をforループの外側に置き、glVertexをループ内に描画するだけです。もちろん、それはポイントで動作します.n倍の1点はn点と同じです。しかし、1つの点からなるn個のポリゴンは、n個の点からなる1つのポリゴンと同じではありません。

3

多角形が間違っているようです。デフォルトでは、OpenGLには正面のみが表示され、反時計回りに指定する必要があります。次のことができます。

  • 反転ごプリミティブの順序(for (int i = numPoints-1; i >= 0 ; i--)
  • 反転前面(glFrontFace(GL_CW)
  • 無効にバックカリング面(glDisable(GL_CULL_FACE))。
+0

こんにちは、仕事.. – George

0

GL_POLYGONでglBeginを呼び出すと、少なくとも3つの頂点があると思います。標準的な描画プロトコルは、各三角形の面に3つの頂点が必要なので、三角形、魔法の頂点を3つのセットで描画することです。あなたはただ一つの頂点だけを供給しているので、あなたは何も見ないでしょう。これにそれを変更してみてください:

glBegin(GL_TRIANGLES); 
glVertex2f(x1, y1); 
glVertex2f(x2, y2); 
glVertex2f(x3, y3); 
glEnd();