Valorcrest 2016-01-07 04:55 采纳率: 100%
浏览 2038
已采纳

OpenGL初学,请问我这段代码有错吗?为什么在窗口显示不出来

#include
#include
#include
#include
#include

const GLint screenWidth = 640;
const GLint screenHeight = 480;

void myInit(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)screenWidth, 0.0, (GLdouble)screenHeight);
}
void checkerboard(void)
{
for(GLint i = 0; i < 8; i++)
{
for(GLint j = 0; j < 8; j++)
{
if((i+j)%2 == 0)
{
glColor3f(0.0f, 0.0f, 0.0f);
}
else
{
glColor3f(1.0f, 1.0f, 1.0f);
}
glRecti(30*j, 30*i, 30*(j+1), 30*(i+1));
}
}
glFlush();
}

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
checkerboard();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(0, 0);
glutCreateWindow("chess");
glutDisplayFunc(myDisplay);

myInit();
glutMainLoop();

}

  • 写回答

3条回答 默认 最新

  • ysuwood 2016-01-07 09:47
    关注

    没什么问题,可能你配置有问题吧。或者编译器不同。
    我用的是VC2010+Win8.1+OpenGL1.4
    你的程序不太友好,我加了按ESC退出。如下:

     #define GLUT_DISABLE_ATEXIT_HACK 
    #include <GL/glut.h>
    
    
    const GLint screenWidth = 640;
    const GLint screenHeight = 480;
    void myInit(void)
    {
        glClearColor(1.0, 1.0, 1.0, 0.0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0.0, (GLdouble)screenWidth, 0.0, (GLdouble)screenHeight);
    }
    void checkerboard(void)
    {
        for(GLint i = 0; i < 8; i++)
        {
            for(GLint j = 0; j < 8; j++)
            {
                if((i+j)%2 == 0)
                {
                    glColor3f(0.0f, 0.0f, 0.0f);
                }
                else
                {
                    glColor3f(1.0f, 1.0f, 1.0f);
                }
                glRecti(30*j, 30*i, 30*(j+1), 30*(i+1));
            }
        }
        glFlush();
    }
    void myDisplay(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        checkerboard();
    }
    void keyboard(unsigned char key, int x, int y)
    {
        switch (key) {
        case 27:
            exit(0);
            break;
        }
    }
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(screenWidth, screenHeight);
        glutInitWindowPosition(0, 0);
        glutCreateWindow("chess");
        glutDisplayFunc(myDisplay);
        myInit();
        glutKeyboardFunc(keyboard);
        glutMainLoop();
    }
    

    运行结果:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?