2

我正在使用带有 VC++ 2010 的 Windows 7

我正在尝试在屏幕上绘制一个简单的点,但它没有显示。屏幕变黑了,所以我知道我有一个有效的 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 );

问题是屏幕上什么都没有出现,唯一发生的就是屏幕被清除了。

4

2 回答 2

6

浏览以下清单(这是来自 delphigl.com (de_DE) 的通用 opengl 清单,我们通常让人们在看不到任何东西时进行检查):

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

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

glPointSize可能不会接受您的值100,因为常见的实现限制为 64 点大小。

对于 OpenGL 的良好开端,我还建议阅读Nehes 教程。它们可能不是最先进的,但涵盖了您现在面临的任何事情。

于 2012-08-23T09:25:18.450 回答
0

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

于 2012-08-24T11:25:00.690 回答