OpenGL - 屏幕上没有任何内容

Tom*_*law 2 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 );
Run Code Online (Sandbox Code Playgroud)

OpenGL的初始化代码是这样的:

glClearColor( 0, 0, 0, 1 );
glShadeModel( GL_SMOOTH );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*fer 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教程.他们可能不是最先进的,但涵盖了你现在面临的任何事情.