为啥 glutSolidTorus 会产生一些缺陷

Posted

技术标签:

【中文标题】为啥 glutSolidTorus 会产生一些缺陷【英文标题】:Why glutSolidTorus generate some flaw为什么 glutSolidTorus 会产生一些缺陷 【发布时间】:2014-01-29 20:55:06 【问题描述】:

这是我的渲染代码。我使用带有 OpenGL 的 Qt。

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();

结果如下:

有很明显的缺陷。但是,如果我将glShadeMode 设置为GL_FLAT,这个缺陷就会消失。但我不想使用GL_FLAT。谁能告诉我如何解决这个问题?

【问题讨论】:

【参考方案1】:
gluPerspective(60, 1, 4000, 1);
                            ^ zFar
                      ^^^^ zNear

zNear 必须小于 zFar

也许你的意思是:

gluPerspective(60, 1, 1, 4000);

【讨论】:

这种伪影意味着深度缓冲区(Z 缓冲区)没有被很好地使用(或者,如 genpfault 发现的那样,设置不正确)。您可以将近/远值调整为更接近实际深度范围,以优化 Z 缓冲区范围。

以上是关于为啥 glutSolidTorus 会产生一些缺陷的主要内容,如果未能解决你的问题,请参考以下文章

为啥 false++ 在 Firefox 中会产生 SyntaxError 而在 Chrome 中会产生 ReferenceError?

ARCGIS生成DEM时高程为0附近的点为啥会产生一些nodata区域?

为啥这个事务会产生死锁?

为啥合并 PDF 会产生文件大小气球?

为啥Java会产生这么多进程?

为啥 scikit-learn 中的 GridSearchCV 会产生这么多线程