我正在使用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 );
问题是屏幕上没有任何内容,唯一发生的事情是屏幕被清除。
答案 0 :(得分:6)
通过以下清单(general opengl checklist from delphigl.com(de_DE),我们通常会在没有看到任何内容时让人们通过这些清单:
glClearColor
。glDisable(GL_TEXTURE_2D)
进行绘制之前禁用它。glViewport
是否设置正确。glTranslatef(0, 0, -6.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)当我删除此调用时,一切都能够正确绘制。非常感谢您的帮助。 :)