2010-05-06 13 views
5

काम नहीं कर रहा है मैं ओजीएल के साथ विरोधी उपनाम करने की कोशिश कर रहा हूं। मुझे एक कोड खंड मिला जो ऐसा करने वाला है लेकिन मुझे कोई एंटीअलाइजिंग नहीं दिखाई दे रही है। मैं अपनी सेटिंग्स को एनवीडिया नियंत्रण कक्ष में भी रीसेट करता हूं लेकिन कोई भाग्य नहीं।ओपनजीएल एंटीअलाइजिंग

क्या यह कोड वास्तव में घन एंटीअलाइज़ करता है?

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; 
} 

धन्यवाद

+0

जब आप यह कोड चलाते हैं, तो यह क्या करता है? – fbrereto

+0

यह शोन unantialiased घन – jmasterx

उत्तर

0

आप glutInitDisplayMode(..) कॉल करने के लिए GLUT_MULTISAMPLE की आपूर्ति करने की कोशिश की है? यह सुनिश्चित नहीं है कि आपका ग्लूट कार्यान्वयन हालांकि इसका समर्थन करता है।

+0

यह काम नहीं किया, GLUT_MULTISAMPLE ने कुछ भी नहीं किया – jmasterx

+0

@ user146780 इसे सुनकर खेद है। फिर ऐसा लगता है कि आप जिस ग्लूट संस्करण का उपयोग कर रहे हैं वह बहुउद्देश्यीय सक्षम विंडो नहीं बनाएगा। http://linux.die.net/man/3/glutinitdisplaymode क्या आपने 'glEnable (GL_MULTISAMPLE_ARB) भी किया था; '? – epatel

1

आप वास्तव में

  • पर विचार करना चाहिए Redbook
  • उपयोग multisampling/लगभग-पदावनत GL_POLYGON_SMOOTH के बजाय supersampling
से जानकारी का एक बेहतर (पढ़ें "तारीख तक") स्रोत खोजने के

आपकी समस्या पर:

  • अपने ग्राफिक कार्ड क्या है?
  • ओपनजीएल का कौन सा संस्करण आप उपयोग कर रहे हैं?
  • क्या आप अपने सभी बहुभुजों को गहराई से गहराई से कर रहे हैं?
+0

9400 एम जी, 2.0, हाँ। – jmasterx