سؤال

Here is my render code. I use a Qt with OpenGL.

static bool firsttime = true;
if(firsttime)
{
    glClearColor(0, 0, 0, 0);
    glCullFace(GL_BACK);
    glFrontFace(GL_CCW);
    glEnable(GL_CULL_FACE);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, fNoLight);
    glLightfv(GL_LIGHT0, GL_AMBIENT, fLowLight);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, fBrightLight);
    glLightfv(GL_LIGHT0, GL_SPECULAR, fBrightLight);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);

    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
    glMateriali(GL_FRONT, GL_SHININESS, 128);
}

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, 1, 4000, 1);

gluLookAt(fLightPos[0] , fLightPos[1] , fLightPos[2] , 0.0f , 0.0f , 0.0f , 0.0f , 1.0f , 0.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glLightfv(GL_LIGHT0, GL_POSITION, fLightPos);
glColor3f(1,1,0);
glutSolidTorus(5, 15, 8, 128);
glFlush();

Here is the result: Torus

There are very obvious flaw. However, if I set the glShadeMode to GL_FLAT, this flaw would disappear. But I don't want to use GL_FLAT. Could anyone tell me how to fix this?

هل كانت مفيدة؟

المحلول

gluPerspective(60, 1, 4000, 1);
                            ^ zFar
                      ^^^^ zNear

zNear must be less than zFar.

Perhaps you meant this:

gluPerspective(60, 1, 1, 4000);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top