⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bounce.c

📁 OpeNGL超级宝典源代码. OpeNGL超级宝典源代码.
💻 C
字号:
// Bounce.c// Demonstrates a simple animated rectangle program with GLUT// OpenGL SuperBible, 3rd Edition// Richard S. Wright Jr.// rwright@starstonesoftware.com#include "../../Common/OpenGLSB.h"	// System and OpenGL Stuff// Initial square position and sizeGLfloat x = 0.0f;GLfloat y = 0.0f;GLfloat rsize = 25;// Step size in x and y directions// (number of pixels to move each time)GLfloat xstep = 1.0f;GLfloat ystep = 1.0f;// Keep track of windows changing width and heightGLfloat 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;    // Check bounds. This is in case the window is made    // smaller while the rectangle is bouncing and the 	// rectangle suddenly finds itself outside the new    // clipping volume    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_RGB);	glutInitWindowSize(800,600);        glutCreateWindow("Bounce");	glutDisplayFunc(RenderScene);        glutReshapeFunc(ChangeSize);	glutTimerFunc(33, TimerFunction, 1);	SetupRC();	glutMainLoop();                return 0;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -