2010-05-06 28 views
5

Tôi đang cố gắng chống lại bí danh với OGL. Tôi tìm thấy một đoạn mã mà là vụ phải làm điều này nhưng tôi thấy không có antialiasing. Tôi cũng thiết lập lại các thiết lập của tôi trong Nvidia Control Panel nhưng không may mắn.OpenGL antialiasing không hoạt động

Mã này có thực sự chống răng cưa khối lập phương không?

GLboolean polySmooth = GL_TRUE; 
static void init(void) 
{ 
    glCullFace (GL_BACK); 
    glEnable (GL_CULL_FACE); 
    glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE); 
    glClearColor (0.0, 0.0, 0.0, 0.0); 
} 

#define NFACE 6 
#define NVERT 8 
void drawCube(GLdouble x0, GLdouble x1, GLdouble y0, 
       GLdouble y1, GLdouble z0, GLdouble z1) 
{ 
    static GLfloat v[8][3]; 
    static GLfloat c[8][4] = { 
     {0.0, 0.0, 0.0, 1.0}, {1.0, 0.0, 0.0, 1.0}, 
     {0.0, 1.0, 0.0, 1.0}, {1.0, 1.0, 0.0, 1.0}, 
     {0.0, 0.0, 1.0, 1.0}, {1.0, 0.0, 1.0, 1.0}, 
     {0.0, 1.0, 1.0, 1.0}, {1.0, 1.0, 1.0, 1.0} 
    }; 

/* indices of front, top, left, bottom, right, back faces */ 
    static GLubyte indices[NFACE][4] = { 
     {4, 5, 6, 7}, {2, 3, 7, 6}, {0, 4, 7, 3}, 
     {0, 1, 5, 4}, {1, 5, 6, 2}, {0, 3, 2, 1} 
    }; 

    v[0][0] = v[3][0] = v[4][0] = v[7][0] = x0; 
    v[1][0] = v[2][0] = v[5][0] = v[6][0] = x1; 
    v[0][1] = v[1][1] = v[4][1] = v[5][1] = y0; 
    v[2][1] = v[3][1] = v[6][1] = v[7][1] = y1; 
    v[0][2] = v[1][2] = v[2][2] = v[3][2] = z0; 
    v[4][2] = v[5][2] = v[6][2] = v[7][2] = z1; 

#ifdef GL_VERSION_1_1 
    glEnableClientState (GL_VERTEX_ARRAY); 
    glEnableClientState (GL_COLOR_ARRAY); 
    glVertexPointer (3, GL_FLOAT, 0, v); 
    glColorPointer (4, GL_FLOAT, 0, c); 
    glDrawElements(GL_QUADS, NFACE*4, GL_UNSIGNED_BYTE, indices); 
    glDisableClientState (GL_VERTEX_ARRAY); 
    glDisableClientState (GL_COLOR_ARRAY); 
#else 
    printf ("If this is GL Version 1.0, "); 
    printf ("vertex arrays are not supported.\n"); 
    exit(1); 
#endif 
} 
/* Note: polygons must be drawn from front to back 
* for proper blending. 
*/ 
void display(void) 
{ 
    if (polySmooth) { 
     glClear (GL_COLOR_BUFFER_BIT); 
     glEnable (GL_BLEND); 
     glEnable (GL_POLYGON_SMOOTH); 
     glDisable (GL_DEPTH_TEST); 
    } 
    else { 
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glDisable (GL_BLEND); 
     glDisable (GL_POLYGON_SMOOTH); 
     glEnable (GL_DEPTH_TEST); 
    } 

    glPushMatrix(); 
     glTranslatef (0.0, 0.0, -8.0);  
     glRotatef (30.0, 1.0, 0.0, 0.0); 
     glRotatef (60.0, 0.0, 1.0, 0.0); 
     drawCube(-0.5, 0.5, -0.5, 0.5, -0.5, 0.5); 
    glPopMatrix(); 

    glFlush(); 
} 

void reshape(int w, int h) 
{ 
    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(30.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 
void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) { 
     case 't': 
     case 'T': 
     polySmooth = !polySmooth; 
     glutPostRedisplay(); 
     break; 
     case 27: 
     exit(0); /* Escape key */ 
     break; 
     default: 
     break; 
    } 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB 
         | GLUT_ALPHA | GLUT_DEPTH); 
    glutInitWindowSize(200, 200); 
    glutCreateWindow(argv[0]); 
    init(); 
    glutReshapeFunc (reshape); 
    glutKeyboardFunc (keyboard); 
    glutDisplayFunc (display); 
    glutMainLoop(); 
    return 0; 
} 

Cảm ơn

+0

Khi bạn chạy mã này, nó sẽ làm gì? – fbrereto

+0

Nó hiển thị khối không được đánh số – jmasterx

Trả lời

0

Bạn đã cố gắng để cung cấp GLUT_MULTISAMPLE đến glutInitDisplayMode(..) cuộc gọi? Nó không chắc chắn thực hiện glut của bạn hỗ trợ nó mặc dù.

+0

Điều này không hiệu quả, GLUT_MULTISAMPLE không làm bất cứ điều gì – jmasterx

+0

@ user146780 Rất tiếc khi nghe điều đó. Sau đó, có vẻ như phiên bản GLUT bạn đang sử dụng sẽ không tạo các cửa sổ có khả năng đa mẫu. http://linux.die.net/man/3/glutinitdisplaymode Bạn cũng làm 'glEnable (GL_MULTISAMPLE_ARB);'? – epatel

1

Bạn thực sự nên xem xét để

  • tìm một tốt hơn (đọc "cập nhật") nguồn gốc của thông tin hơn so với Redbook
  • sử dụng cách liền lạc/SuperSampling thay vì GL_POLYGON_SMOOTH gần như bị phản đối

Về sự cố của bạn:

  • Card đồ họa của bạn là gì?
  • Bạn đang sử dụng phiên bản OpenGL nào?
  • Bạn có phân loại chiều sâu tất cả các đa giác của mình không?
+0

9400M G, 2.0, có. – jmasterx

Các vấn đề liên quan