OpenGL - 屏幕上没有任何内容

时间:2012-08-23 09:08:03

标签: c opengl

我正在使用Windows 7和VC ++ 2010

我正在尝试向屏幕绘制一个简单的点,但它没有显示。 屏幕清除为黑色,所以我知道我有一个有效的OpenGL上下文......

基本上我的OpenGL代码归结为此(此时我没有深度缓冲区):

glClear( GL_COLOR_BUFFER_BIT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 45.0, 1018.0 / 743.0, 5.0, 999.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

glColor4f( 1, 1, 1, 1 );
glPointSize( 100 );
glBegin( GL_POINTS );
glVertex2i( 0, 0 );
glEnd();

SwapBuffers( hdc );

OpenGL的初始化代码如下:

glClearColor( 0, 0, 0, 1 );
glShadeModel( GL_SMOOTH );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );

问题是屏幕上没有任何内容,唯一发生的事情是屏幕被清除。

2 个答案:

答案 0 :(得分:6)

通过以下清单(general opengl checklist from delphigl.com(de_DE),我们通常会在没有看到任何内容时让人们通过这些清单:

  • 你的物体是否意外涂成黑色?尝试更改glClearColor
  • 您是否意外启用了纹理?在使用glDisable(GL_TEXTURE_2D)进行绘制之前禁用它。
  • 尝试禁用以下测试:
    • GL_DEPTH_TEST
    • GL_CULL_FACE
    • GL_ALPHA_TEST
  • 检查glViewport是否设置正确。
  • 尝试使用glTranslatef(0, 0, -6.0)
  • 将模型视图矩阵从近剪裁平面(在您的情况下为5.0)中翻译出来

有几个潜在的问题。主要问题是您如何使用gluPerspective投影。 gluPerspective用于透视视图,因此,它不会在视图坐标中的(0,0,0)处显示任何内容。在您的设置中,您禁止在视图坐标(近剪裁平面)中显示(0,0,5)之前的任何内容。我建议您将您的观点设为glVertex3f(0., 0., 10.),然后重试。另一种解决方案是使用glTranslatef将视图坐标移动超过5个单位。

glPointSize也可能不会接受100的值,因为常见的实现仅限于64位。

为了开始使用OpenGL,我还建议您阅读Nehes Tutorials。它们可能不是最先进的,但涵盖了你现在面临的任何事情。

答案 1 :(得分:0)

问题是因为我曾经误称glDepthRange误解了它实际上做了什么,我这样称呼它:glDepthRange( nearPlane, farPlane )。 (这是5.0f和999.0f)当我删除此调用时,一切都能够正确绘制。非常感谢您的帮助。 :)