資源簡介
用OpenGL庫寫的一個小球落地后彈起的程序,并且無速度損失,彈起到起始高度,如果你修改起始x方向速度xstep的初值,小球可以邊跳躍邊前進,并且碰到邊框會反彈回來。為了驗證彈起高度是否等于原來高度,我畫了兩條紅色基準線,你會看到兩條線一次又一次的重合。

代碼片段和文件信息
#include?
#include?“gl/glut.h“
#include?
#include?
#include?
//?參數指定正方形的位置和大小
float?xsite?=?100.0;
float?ysite?=?200.0;
GLsizei?rsize?=?20;
//?正方形運動變化的步長
float?xstep?=?2.0f;
float?ystep?=?0.0f;
//?窗口的大小
float?windowWidth?=?500;
float?windowHeight?=?400;
int?TIME=13;
inline?void?myArc(int?xint?yint?aint?bint?start_angleint?end_angledouble?frdouble?fgdouble?fb)
{
int?angle;
const?double?pi?=?acos(-1);
if(fr>=0)
{
glBegin(GL_TRIANGLE_FAN);
glColor3d(frfgfb);
glVertex2i(xy);
for(angle?=?start_angle;?angle?<=?end_angle;?angle?=?angle?+?1)
{
int?px?=?x?+?a*cos(angle/180.0?*pi);
int?py?=?y?+?b*sin(angle/180.0?*pi);
glVertex2i(pxpy);
}
glEnd();
}
else
{
glBegin(GL_LINE_STRIP);
for(angle?=?start_angle;?angle?<=?end_angle;?angle?=?angle?+?1)
{
int?px?=?x?+?a*cos(angle/180.0?*pi);
int?py?=?y?+?b*sin(angle/180.0?*pi);
glVertex2i(pxpy);
}
glEnd();
}
}
void?drawLine(int?Linex1int?Liney1int?Linex2int?Liney2)
{
glColor3f(1.0f??0.0f??0.0f);?//RGB
glBegin(GL_LINES);
{
glVertex2i(Linex1Liney1);
glVertex2i(Linex2Liney2);
}
glEnd();
glFlush();
}
inline?void?myCircle(int?xint?yint?radiusdouble?frdouble?fgdouble?fb)
{
myArc(xyradiusradius0360frfgfb);
drawLine(0ywindowWidthy);
}
void?RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f?0.0f?0.0f);
//glRectf(xsite?ysite?xsite+rsize?ysite+rsize);
myCircle(xsiteysitersize01.01.0);
drawLine(0200windowWidth200);
//清空命令緩沖區并交換幀緩存
glutSwapBuffers();
}
void?ChangeSize(GLsizei?w?GLsizei?h)
{
if(h?==?0) h?=?1;
glViewport(0?0?w?h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if?(w?<=?h)?
{
windowHeight?=?300.0f*h/w;
windowWidth?=?300.0f;
}
????else?
{
windowWidth?=?300.0f*w/h;
windowHeight?=?300.0f;
}
glOrtho(0.0f?windowWidth?0.0f?windowHeight?1.0f?-1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void?TimerFunction(int?value)
{
//?處理到達窗口邊界的球,使之反彈
if(xsite+rsize?>?windowWidth?||?xsite-rsize?0){
if(xstep>0)xstep?=?-xstep;
}
if(ysite+rsize?>?windowHeight?||?ysite-rsize?0){
if(ystep<0)
ystep?=?-(ystep-0.205);
}
if(xsite-rsize?0) xstep?=?-xstep-0.1;
if(ysite?>?windowHeight-rsize) ysite?=?windowHeight-rsize;
//?根據步長修改正方形的位置
????ystep?=?ystep-0.5*450*0.030*0.030;
xsite?+=?xstep;
ysite?+=?ystep;
//?用新坐標重新繪圖
????glutPostRedisplay();
glutTimerFunc(TIMETimerFunction?1);
}
void?SetupRC(void)
{
//設置窗口清除色為白
glClearColor(1.0f?1.0f?1.0f?1.0f);?
}
void?main()
{
glutInitDisplayMode(GLUT_DOUBLE?|?GLUT_RGB);
glutCreateWindow(“Bounce“);
glutDisplayFunc(RenderScene);
????glutReshapeFunc(ChangeSize);
????glutTimerFunc(TIME?TimerFunction?1);
SetupRC();
glutMainLoop();
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3014??2012-04-13?14:30??BallGame\BallGame.cpp
?????文件???????3425??2012-04-13?10:24??BallGame\BallGame.dsp
?????文件????????539??2012-04-13?10:25??BallGame\BallGame.dsw
?????文件??????50176??2012-04-13?14:37??BallGame\BallGame.ncb
?????文件??????53760??2012-04-13?14:37??BallGame\BallGame.opt
?????文件????????692??2012-04-13?14:30??BallGame\BallGame.plg
?????文件????1999872??2012-04-13?09:32??BallGame\Debug\BallGame.bsc
?????文件?????180314??2012-04-13?14:29??BallGame\Debug\BallGame.exe
?????文件?????267608??2012-04-13?14:29??BallGame\Debug\BallGame.ilk
?????文件??????21256??2012-04-13?14:30??BallGame\Debug\BallGame.obj
?????文件????3700532??2012-04-13?14:12??BallGame\Debug\BallGame.pch
?????文件?????476160??2012-04-13?14:29??BallGame\Debug\BallGame.pdb
?????文件??????????0??2012-04-13?09:32??BallGame\Debug\BallGame.sbr
?????文件?????230400??2012-04-13?14:30??BallGame\Debug\vc60.idb
?????文件??????77824??2012-04-13?14:30??BallGame\Debug\vc60.pdb
?????文件??????60468??1998-08-13?02:54??BallGame\gl\FGL.H
?????文件???????7273??1998-08-13?02:54??BallGame\gl\FGLU.H
?????文件??????10152??1998-08-13?02:54??BallGame\gl\FGLUT.H
?????文件??????71555??1997-11-07?02:34??BallGame\gl\gl.h
?????文件???????5150??1998-08-13?02:54??BallGame\gl\GLSMAP.H
?????文件??????14367??1997-10-31?02:18??BallGame\gl\glu.h
?????文件??????20844??1998-08-13?02:54??BallGame\gl\GLUT.H
?????文件???????8874??1998-08-13?02:54??BallGame\gl\TUBE.H
?????文件?????180224??1999-07-29?15:48??BallGame\GLUT32.DLL
?????文件??????27096??1999-07-29?15:48??BallGame\GLUT32.LIB
?????文件??????35606??1997-10-31?02:18??BallGame\lib\glu.lib
?????文件??????11056??1998-08-13?02:49??BallGame\lib\GLUT\capturexfont.c
?????文件???????2277??1998-08-13?02:46??BallGame\lib\GLUT\GLUT.DEF
?????文件?????180224??1999-07-29?15:48??BallGame\lib\GLUT\GLUT32.DLL
?????文件??????17306??1999-07-29?15:48??BallGame\lib\GLUT\GLUT32.EXP
............此處省略79個文件信息
- 上一篇:風電功率預測的數學建模
- 下一篇:la
yerAdmin框架.rar
評論
共有 條評論