2012-07-28 47 views
1

我想用opengl繪製一個6面的obelisk多邊形不會在屏幕上顯示

下面是我用方尖碑的底表面進行建模的代碼:

void drawObelisk() { 
    glColor3f(1.0,1.0,0.0); 

    glBegin(GL_POLYGON); 
    for (x=0.0; x<2.0*pi/3; x=x+inc) 
    { 
     glVertex3f(0.3*cos(x),0.3*sin(x),0.0); 
    } 
    glEnd(); 
} 

該代碼被用來渲染模型:

void myDisplay(void) 
{ 
    glEnable(GL_CULL_FACE); 
    glEnable(GL_DEPTH_TEST); 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glPushMatrix(); 
    drawObelisk(); 
    glPopMatrix(); 
    glFlush(); 
} 

void SetupRC(void) 
{ 
    glClearColor(0.0, 0.0, 1.0, 1.0); 
    glOrtho(-6.0,6.0,-6.0,6.0,-6.0,6.0); 
} 

void main(void) 
{ 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(640,480); 
    glutInitWindowPosition(10,15); 
    glutCreateWindow("Test"); 
    glutDisplayFunc(myDisplay); 
    SetupRC(); 
    glutIdleFunc(idle); 
    glutMainLoop(); 
} 

因爲某種原因,該多邊形面,我一旦模型渲染,畫筆就不會顯示在屏幕上。

+1

這段代碼沒有上下文就沒有出現。理想情況下,我們會看到您的整個渲染函數和OpenGL上下文設置。 – datenwolf 2012-07-28 09:39:21

+0

已添加各自的代碼。謝謝... – rofans91 2012-07-28 09:43:36

+0

提供的代碼是不夠的。什麼是drawArrow(),inc? – 2012-07-28 09:57:00

回答

1

這給一個鏡頭:

#include <GL/glut.h> 
#include <math.h> 

void drawObelisk() 
{ 
    double pi = 3.14159; 
    double inc = (2*pi)/6; 

    glColor3f(1.0,1.0,0.0); 

    glBegin(GL_POLYGON); 
    for(double theta = 0.0; theta < 2*pi; theta += inc) 
    { 
     double scale = 2.0; 
     double x = scale * cos(theta); 
     double y = scale * sin(theta); 
     glVertex3d(x,y,0.0); 
    } 
    glEnd(); 
} 

void myDisplay(void) 
{ 
    glEnable(GL_CULL_FACE); 
    glEnable(GL_DEPTH_TEST); 

    glClearColor(0.0, 0.0, 1.0, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-6.0,6.0,-6.0,6.0,-6.0,6.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glPushMatrix(); 
    drawObelisk(); 
    glPopMatrix(); 

    glFlush(); 
} 

void main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(640,480); 
    glutInitWindowPosition(10,15); 
    glutCreateWindow("Test"); 
    glutDisplayFunc(myDisplay); 
    glutMainLoop(); 
} 

output

東西是靠不住的: