Opengl 发出奇怪光的球状物

Opengl 发出奇怪光的球状物,opengl,glfw,glu,Opengl,Glfw,Glu,在使用glut时,我使用glutsolidsphere绘制球体,但在迁移到glfw后,我不得不使用GLUTSphere。我基本上是将整个函数“glutsolidsphere”复制到我自己的代码中,但我遇到了一个奇怪的照明问题,而我以前没有遇到这个问题。下面是球体的代码: void drawSolidSphere(GLdouble radius, GLint slices, GLint stacks) { GLUquadric *shape = gluNewQuadric(); g

在使用glut时,我使用glutsolidsphere绘制球体,但在迁移到glfw后,我不得不使用GLUTSphere。我基本上是将整个函数“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);
}

这里有什么问题


编辑:由于某些原因,我无法上传大学的图像,所以我将尝试描述它:球体轮廓看起来不错,但是你可以看到内部的部分,比如球体的外部是透明的,它会导致球体中出现明显的分界线。

看起来深度测试有问题

假设您有一个glfw的深度缓冲区,这能修复它吗

glEnable(GL_DEPTH_TEST);
我没有使用glfw,但要请求深度缓冲区,您似乎只需要将24传递给
glfwOpenWindow
depthbits
参数

您还需要将
GL\u DEPTH\u BUFFER\u BIT
添加到
glClear
调用中(如果尚未添加)

我以前在使用glut/freeglut的windows和linux中遇到过与默认GL状态不一致的情况,特别是GL_DEPTH_测试


另外,请参见

我启用了所有这些功能,但这不是问题所在,问题在于GLFW如何处理这些功能等等。如果它们在windowShouldClose循环之外,则没有效果,但如果启用在内部,则有效。@Dashfall:这是有道理的,您必须认识到OpenGL命令只有在具有渲染上下文绑定时才有效。大多数窗口系统框架将为每个窗口事件切换绑定上下文,有些甚至在回调返回后解除绑定上下文。使用这些框架时,最好在回调函数中进行状态更改。