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