0

在使用 glut 时,我使用 glutsolidsphere 来绘制我的球体,但是在迁移到 glfw 之后,我不得不使用 glusphere。我基本上将整个函数“glutsolidsphere”复制到我自己的代码中,但是我遇到了一个奇怪的照明问题,以前我没有。这是球体的代码:

领域

void drawSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
    GLUquadric *shape = gluNewQuadric();
    gluQuadricDrawStyle(shape, GLU_FILL);
    gluQuadricNormals(shape, GLU_SMOOTH);
    gluSphere(shape, radius, slices, stacks);
}

这里有什么问题?

编辑:由于某种原因,我无法上传大学的图片,所以我会尝试描述它:球体轮廓看起来不错,但是你可以看到内部的片段,就像球体的外部是透明的,它会导致那里要在领域中明确划分。

4

1 回答 1

1

看起来深度测试有问题。

假设你有一个来自 glfw 的深度缓冲区,这能解决吗?

glEnable(GL_DEPTH_TEST);

depthbits我没有使用glfw ,但要请求深度缓冲区,看起来您只需将 24 例如传递给glfwOpenWindow.

如果您还没有,您还需要添加GL_DEPTH_BUFFER_BIT到您的通话中。glClear

我以前使用 glut/freeglut 在 windows 和 linux 中遇到过与默认 GL 状态(特别是 GL_DEPTH_TEST)不一致的情况。

另外,请参阅gluNewQuadric 泄漏内存

于 2013-09-27T11:07:13.880 回答