资源简介
这是一个在VC6上实现的一个粒子系统,该系统用粒子模拟瀑布水流,系统产生很多粒子,粒子自由下落,打在地面的平面上又溅起再下落。每个粒子都有初速度和运动方向,粒子是用OpenGL的小球模拟的,粒子运动是用OpenGL的回调函数glutIdleFunc(animation)的animation()函数实现的。
代码片段和文件信息
/*
模拟瀑布的粒子系统
*/
#include
#include
#include
#include
// variables to keep track of the current rotation on each axis
GLfloat camPitch = 0.0 camYaw = 1.0 camRadius = 12.0;
int mxmy; // used to calculate mouse displacement
int mdown; // is a button down?
int buttonDown; // if so which button?
char *outfile = “windowDump.raw“;
typedef GLfloat point3[3];
GLfloat t=0.0; // parameter for the family of functions
#define HOWMANY 1000000
#define ToUpdate 100
int WIDTH = 500;
int HEIGHT = 500;
static GLubyte bufImage[500][500][3];
float particles[HOWMANY][7];
GLfloat white[] = {1.0 1.0 1.0 1.0};
GLfloat yellow[]= {1.0 1.0 0.0 1.0};
GLfloat mat_shininess[]={ 30.0 };
// function prototypes follow
GLfloat XX( int );
GLfloat ZZ( int );
void myinit( void );
float tweak(float);
void particlesInit(int);
void update(int);
void drawParticle(int);
void waterfall(void);
//void surface( void );
void display( void );
void reshape( int int );
void keyboard(unsigned char int int );
void animate( void );
void saveWindow(char * int int);
// initialize OpenGL and all necessary global variables
void myinit(void)
{
int i;
GLfloat light_pos0[]={ 0.0 10.0 10.0 1.0 }; // first light over z-axis
GLfloat light_col0[]={ 1.0 0.0 0.0 1.0 }; // and red
GLfloat amb_color0[]={ 0.3 0.0 0.0 1.0 }; // even ambiently
GLfloat light_pos1[]={ 5.0 10.0 -7.26 1.0 }; // second light back/right
GLfloat light_col1[]={ 0.0 1.0 0.0 1.0 }; // and green
GLfloat amb_color1[]={ 0.0 0.3 0.0 1.0 }; // even ambiently
GLfloat light_pos2[]={ -5.0 10.0 -7.26 1.0 }; // third light back/left
GLfloat light_col2[]={ 0.0 0.0 1.0 1.0 }; // and blue
GLfloat amb_color2[]={ 0.0 0.0 0.3 1.0 }; // even ambiently
// set up overall light data
GLfloat mat_specular[] ={ 0.8 0.8 0.8 1.0 };
glClearColor( 0.0 0.0 1.0 0.0 );
glShadeModel(GL_SMOOTH); // use gourand shading
glMaterialfv(GL_FRONT_AND_BACK GL_SPECULAR mat_specular );
glLightfv(GL_LIGHT0 GL_POSITION light_pos0 ); // light 0
glLightfv(GL_LIGHT0 GL_AMBIENT amb_color0 );
glLightfv(GL_LIGHT0 GL_SPECULAR light_col0 );
glLightfv(GL_LIGHT0 GL_DIFFUSE light_col0 );
glLightfv(GL_LIGHT1 GL_POSITION light_pos1 ); // light 1
glLightfv(GL_LIGHT1 GL_AMBIENT amb_color1 );
glLightfv(GL_LIGHT1 GL_SPECULAR light_col1 );
glLightfv(GL_LIGHT1 GL_DIFFUSE light_col1 );
glLightfv(GL_LIGHT2 GL_POSITION light_pos2 ); // light 2
glLightfv(GL_LIGHT2 GL_AMBIENT amb_color2 );
glLightfv(GL_LIGHT2 GL_SPECULAR light_col2 );
glLightfv(GL_LIGHT2 GL_DIFFUSE light_col2 );
glLig
- 上一篇:进程调度的设计与实现图形界面实现源代码
- 下一篇:点云数据滤波------数学形态学
相关资源
- 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++类
- C++ 3D 五子棋 opengl
- 使用OpenGL编写的三维曲线和曲面,V
- openGL四面体、立方体、正N棱柱、齿轮
- 用OpenGL开发的机械臂运动仿真程序
- OPENGL 星空 背景 图像
- mfc+opengl离散点绘制曲面
评论
共有 条评论