1

我是opengl初学者。我设置了 DLL、库、标题,但是发生了错误。我的开发环境是win7(64位)。

供参考 - DLL:C:\Windows\System32, C:\Windows\SysWOW64 // glu32.dll, glut.dll, glut32.dll, opengl32.dll

库:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib // glut.lib, glut32.lib

头文件:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl // GL.H, GLAUX .H, GLU.H, 过剩.h

#include <Windows.h>
#include <gl/glut.H>

void DoDisplay ( void )
{
    glClearColor ( 0.0f, 0.0f, 1.0f, 1.0f );
    glClear( GL_COLOR_BUFFER_BIT );

    glBegin ( GL_TRIANGLES );

    glVertex2f ( 0.0, 0.5 );
    glVertex2f ( -0.5, -0.5 );
    glVertex2f ( 0.5, -0.5 );

    glEnd ();
    glFlush ();
}

int main ( int argc, char ** argv )
{
    glutInit ( &argc, argv );
    glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE );
    glutInitWindowSize ( 300, 300 );
    glutInitWindowPosition ( 0, 0 );
    glutCreateWindow ( "OpenGL" );
    glutDisplayFunc ( DoDisplay );
    glutMainLoop ();

    return 0;
}

编辑 :

白窗:http: //i.stack.imgur.com/9GJoN.jpg

此代码只是输出白色三角形。

Win32 项目 -> 控制台项目。

问题没有解决。。对不起。

错误是http://i.stack.imgur.com/9GJoN.jpg

4

2 回答 2

3
  • 您正在使用即时模式。你有glEnd()但没有glBegin()
  • 正如 PeterT 还指出的那样,您没有调用glutInit
  • 如果您的路径是按照您打印的方式指定的,您将遇到问题。你有正斜杠和反斜杠,至少根据我的经验,这会破坏路径。
  • 您没有将屏幕清除为特定颜色,也没有将顶点设置为特定颜色。这可能是在暴风雪中绘制北极熊的情况。

查看

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glClearColor(r, g, b, a);
  • 正如 Drew McGowen 指出的那样,您没有指定任何变换或投影矩阵。
  • 强烈建议您查找有关 OpenGL 的教程,以很好地解释绘制三角形所需的所有操作以及原因。Lighthouse3d、Swiftless、OGLDev - 有很多应该向您展示基础知识。
  • 还有一点:您正在尝试学习已弃用约 7 年的代码。您应该学习新的可编程流水线而不是固定功能流水线,因为它速度更快,并且给您更多的控制权。
于 2013-08-08T13:12:41.910 回答
1
void DoDisplay ( void )
{
    ...
    glFlush ();
}

int main ( int argc, char ** argv )
{
    ...
    glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE );
    ....
}

glFlush()使用时不足GLUT_DOUBLE。改为使用glutSwapBuffers()

于 2013-08-08T15:28:48.277 回答