首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

opengl中绘制移动的方块解决办法

2012-03-20 
opengl中绘制移动的方块《OpenGL超级宝典》中的一个例子“程序清单2.3”,绘制一个移动的方块,方块碰到窗口边框

opengl中绘制移动的方块
《OpenGL超级宝典》中的一个例子“程序清单2.3”,绘制一个移动的方块,方块碰到窗口边框即向反方向移动。都是按书上的内容输入的代码,可是没有效果,请高手帮忙看看错在哪里?最好能够把正确的代码给我,谢谢了。
附:这是一个控制台应用程序。

C/C++ code
#include <windows.h>#include <gl/glut.h>GLfloat x = 0.0f;GLfloat y = 0.0f;GLfloat rsize = 25;GLfloat xstep = 1.0f;GLfloat ystep = 1.0f;GLfloat windowWidth;GLfloat windowHeight;///////////////////////////////////////////////////////////// Called to draw scenevoid RenderScene(void)    {    // Clear the window with current clearing color    glClear(GL_COLOR_BUFFER_BIT);       // Set current drawing color to red    //           R     G       B    glColor3f(1.0f, 0.0f, 0.0f);    // Draw a filled rectangle with current color    glRectf(x, y, x + rsize, y - rsize);    // Flush drawing commands and swap    glutSwapBuffers();    }///////////////////////////////////////////////////////////// Called by GLUT library when idle (window not being// resized or moved)void TimerFunction(int value)    {    // Reverse direction when you reach left or right edge    if(x > windowWidth-rsize || x < -windowWidth)        xstep = -xstep;    // Reverse direction when you reach top or bottom edge    if(y > windowHeight || y < -windowHeight + rsize)        ystep = -ystep;    // Actually move the square    x += xstep;    y += ystep;        if(x > (windowWidth-rsize + xstep))        x = windowWidth-rsize-1;    else if(x < -(windowWidth + xstep))        x = -windowWidth -1;    if(y > (windowHeight + ystep))        y = windowHeight-1;     else if(y < -(windowHeight - rsize + ystep))        y = -windowHeight + rsize - 1;     // Redraw the scene with new coordinates    glutPostRedisplay();    glutTimerFunc(33,TimerFunction, 1);    }///////////////////////////////////////////////////////////// Setup the rendering statevoid SetupRC(void)    {    // Set clear color to blue    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);    }///////////////////////////////////////////////////////////// Called by GLUT library when the window has chanaged sizevoid ChangeSize(int w, int h)    {    GLfloat aspectRatio;    // Prevent a divide by zero    if(h == 0)        h = 1;            // Set Viewport to window dimensions    glViewport(0, 0, w, h);    // Reset coordinate system    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    // Establish clipping volume (left, right, bottom, top, near, far)    aspectRatio = (GLfloat)w / (GLfloat)h;    if (w <= h)         {        windowWidth = 100;        windowHeight = 100 / aspectRatio;        glOrtho (-100.0, 100.0, -windowHeight, windowHeight, 1.0, -1.0);        }    else         {        windowWidth = 100 * aspectRatio;        windowHeight = 100;        glOrtho (-windowWidth, windowWidth, -100.0, 100.0, 1.0, -1.0);        }    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    }///////////////////////////////////////////////////////////// Main program entry pointint main(int argc, char* argv[])    {    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);    glutInitWindowSize(800,600);    glutCreateWindow("Bounce");    glutDisplayFunc(RenderScene);    glutReshapeFunc(ChangeSize);    glutTimerFunc(33, TimerFunction, 1);    SetupRC();    glutMainLoop();            return 0;    }


[解决办法]
探讨

to:dizuo

问题是我这个方法为什么错了呢?错在哪?求解。

[解决办法]
你这个程序时opengl超级宝典上的程序吧,那本书的光盘上有一个shared文件夹,作者用的是里面的头文件,吧shared文件夹设置成系统include路径就可以了。

热点排行