资源简介
OpenGL编程示例,制作雪花飘落效果,有键盘和鼠标控制。
代码片段和文件信息
//////////////////////////////////////////////
// Double buffered resizeable 2D GL windowing environment using GLUT
//////////////////////////////////////////////
#include
#include
#include
#include
//
//globale variables
//
const int milliseconds_per_frame = 500;
float posX posY;
float posXA[100];
float posYA[100];
int sizeA[100];
float angleA[100];
int cnt=0;
int size=1;
int angle=0;
int filled = 1;
int animation=1;
int windowWidth=700;
int windowHeight=600;
//
// Forward declarations
//
void DrawScene();
void DrawSnow();
void DrawEdge();
void FillEdge();
//
// Initialisation functions
//
static void DrawInit()
{
// OpenGL one-time initialisation
glClearColor(0.65F 0.65F0.9F 1.0F);
cnt=0;
}
//
// Callbacks
//
void Timer(int id)
{
for(int i=0; i< cnt; i++)
{
angleA[i]+=(0.1+5/sizeA[i]);
posXA[i]+=0.25;
posYA[i]-=0.5;
if(posXA[i]>(windowWidth+50))
{
posXA[i]-=windowWidth;
}
if(posYA[i]<-50)
{
posYA[i]+=windowHeight;
}
}
glutPostRedisplay();
}
void DisplayFunc()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.65F 0.65F0.9F 1.0F);
glClear(GL_COLOR_BUFFER_BIT);
if(animation)
glutTimerFunc(milliseconds_per_frameTimer1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
DrawScene();
glutSwapBuffers();
}
void PainSnow(int btn int state int x int y)
{
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
size = rand()%5+1;
angle = rand()%30;
posX=x;
posY = windowHeight-y;
posXA[cnt]=posX;
posYA[cnt]=posY;
sizeA[cnt]=size;
angleA[cnt]=angle;
cnt++;
}
}
void KeyboardFunc(unsigned char key int x int y)
{
switch(key)
{
case ‘a‘ :
case ‘A‘ :
{
if(animation==0)
{
animation=1;
}else{
animation=0;
}
}
case ‘x‘ :
case (‘X‘):
{
cnt=0;
DrawInit();
break;
}
case ‘f‘:
case ‘F‘:
{
if(filled==1)
{
filled=0;
}
else
{
filled=1;
}
break;
}
case 27: // escape key pressed
{
exit(0);
break;
}
}
}
void ReshapeFunc( int x int y )
{
// Orthographic view fills the window
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D( 0.0 x 0.0 y );
glViewport( 0 0 x y );
windowWidth=x;
windowHeight=y;
}
void IdleFunc()
{
glutPostRedisplay();
}
void FillEdge()
{
glColor3f(0.70f 0.70f 1.0f);
glBegin(GL_POLYGON);
glVertex2f(0.0f 30.0f);
glVertex2f(0.0f 00.0f);
glVertex2f(260.0f 00.0f);
glVertex2f(250.0f 30.0f);
- 上一篇:基于模糊控制的速度跟踪控制问题
- 下一篇:c++分屏显示
相关资源
- 编写 1 个程序绘制这些控制点生成的
- vc++ 和 openGL 做的 3D水波模拟 非常炫
- 基于openGl的画直线和三角形光栅化源
- opengl+mfc画线填充左键单击绘包围线、
- vs mfc opengl配置教程
- OpenGL实现模拟瀑布的粒子系统
- OpenGL安装包加配置 一看就懂
- 基于OPENGL的C语言大作业
- OpenGL 立体五角星 绘制
- 用opengl实现分形山
- 计算机图形学VSC++生成时钟报告含代码
- 山东大学图像学实验openGL读取off文件
- VC++ OpenGL三维物体建模--雨伞的绘制(
- 地球绕着太阳转,月亮绕着地球转
- 配置OpenGL所需文件全
- 用C++ 和opengl实现多个雪人,而且可以
- OpenGL 真实感图形编程C++实现
- opengl动态显示贝塞尔曲线
- opengl绘制行星两个行星一个恒星
- vc++ opengl 下雪场景实现
- 基于OpenGL的音乐可视化、频谱图
- OpenGL开发库含VC和VS配置方法全
- 计算机图形学考试内容-Opengl-会移动的
- 利用opengl 组件的基础上使用VC++编写的
- opengl鼠标交互简单
- opengl 实现 雪花
- opengl实现鼠标坐标的显示
- 贝塞尔曲面 vc++ opengl
- c++写的OpenGL程序透明金字塔有加上光
- OpenGl文字显示c++类
评论
共有 条评论