资源简介
使用opengl对水流进行模拟,由于初学,水流效果很粗糙。本人电脑i5 4核,内存4G。水流粒子数5000,没有进行任何加速(没有使用领域搜索法),电脑跑起来只有10fps左右。初学opengl或者光滑粒子流体动力学(sph)的大神可以下载下来看一看。不过要自己配置opengl库对代码进行编译...
代码片段和文件信息
#include “stdafx.h“
#include“windows.h“
#include“glut.h“
#include“math.h“
#define A1 0.25
#define B1 0.25
#define C1 0.25
#define D 30
#define K 0.08 //运动产生的阻力系数
#define K3 2.f//流体压强相关常数
#define U4 20.f//粘度系数
#define U1 15.f //水杯界面阻尼力
#define K4 2.f //水杯界面弹性系数
#define PI 3.14159
#define H 0.75 //光滑核半径
#define M 1.f //粒子质量
#define G -9.8 //重力常量
double t=0.01; //时间步长
#define bool int
#define false 0
#define true 1
//double scale = 1.f;
int winWidth winHeight;
float eye[3]={0-0 5}; //视点
float at[3]={00 0}; //观测点
float up[3]={01000 0}; //向上向量
typedef struct{
double xyz;
double vxvyvz;
double pvxpvypvz;
double fxfyfz;
double ve; //密度
double p; //压力
}Mess;
Mess mess[100][100];
float x1=-2x2=2y11=-1y22=2z1=-2z2=2;
#define PARTICLE_COUNTS 1000000
#define GLUT_WHEEL_UP 3 //定义滚轮操作
#define GLUT_WHEEL_DOWN 4
GLuint cubemap_tex;
int starttend;
double angle=0;
double rate=0.03;
double tranlate=0;
const float A=1.0;
const float B=1.0;
float C=1;
float tranx = 0.0f;
float trany = 0.0f;
float tranz = 0.0f;
double anger_x = 0;
double anger_y = 0;
double anger_move_x = 0;
double anger_move_y = 0;
double shift_x = 0;
double shift_y = 0;
double shift_move_x = 0;
double shift_move_y = 0;
double scale = 1.0f;
int wndWidth=500;
int wndHeight=500;
float gl_ambient_ffuse[]={ 0.5 0.5 0.5 0.3};
void Init()
{
glClearColor(1.01.011.0);//设置背景颜色
glClearDepth(1.0);//设置深度缓存
glEnable(GL_NORMALIZE); //启动单位化
glEnable(GL_DEPTH_TEST);//启动深度测试
glDepthFunc(GL_LEQUAL);
glShadeModel(GL_SMOOTH); // 启用阴影平滑
glHint(GL_PERSPECTIVE_CORRECTION_HINTGL_NICEST);//透视修正
glShadeModel(GL_SMOOTH);
glEnable(GL_TEXTURE_2D); //纹理映射
double b=0;
for(int j=0;j double c=1a=1;
for(int i=0;i<100;i++)
{
if(i%10==0)
{
a=a-A1;
c=1;
}
mess[j][i].x=a;mess[j][i].y=b;mess[j][i].z=c;
mess[j][i].fx=0;mess[j][i].fy=G;mess[j][i].fz=0;//重力
mess[j][i].ve=0;
mess[j][i].p=0;
c=c-C1;
}
b=b+B1;
}
}
double ABS(double a)
{
return a>0?a:-a;
}
void TimerFunction(int value)
{
//printf(“%d\n“value);
glutPostRedisplay();
glutTimerFunc(20TimerFunction 1);
}
void color_set(float *mat_diffuse)
{
float gl_specular2[]={0 0 0 1};
float gl_shininess2[]={30};
float gl_emission2[]={0001};
glMaterialfv(GL_FRONT GL_AMBIENT_AND_DIFFUSE mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACKGL_SPECULARgl_specular2);
glMaterialfv(GL_FRONT_AND_BACKGL_SHININESSgl_shininess2);
glMaterialfv(GL_FRONT_AND_BACKGL_EMISSIONgl_emission2);
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//--------设置透视
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glRotatef( ( anger_x + anger_move_x ) * 90 1.0f 0.0f 0.0f);
glRotatef( ( anger_y + anger_move_y ) * 90 0.0f 1.
相关资源
- opengl源代码,全是精华!
- OpenGL迷宫山东大学图形学实验三
- opengl的立方体消隐算法
- vc++ opengl代码爆炸
- 我见过最漂亮的CS仿真程序openGL和C+
- 广东某工业大学的openGL课程设计
- 使用OpenGL实现多个小球在密闭空间内
- 利用openGL和C++实现光线跟踪绘图的完
- OpenGl C++太阳系小行星运行系统 可切换
- vc++和OpenGL实现三维地形实时动态显示
- C++实现利用OpenGL实现三维绘图
- 太阳、地球、月亮之间的运动图Open
- MFC 单文档 实现opengl 三维旋转 缩放
- OPENGL的烟花程序(代码)
- MFC+OpenGL三维建模与动画显示
- 基于opengl粒子系统实现喷泉的模拟
- 一个基于openGL的太阳系模型,太阳地
- vc6.0+opengl纯色五角星填充
- vc6.0+opengl动态绘制五角星
- NeHe_OpenGL教程完整版 里面有地址可以
- OpenGL简单——实现立方体贴上不同纹
- MFC实现dem的读取与现实
- VC++ OpenGL三维地形漫游
- OpenGL实现三维地形实时动态显示
- VC++中Opengl实现建筑物虚拟漫游
- OpenGL 建筑物漫游
- 用OpenGL实现球面纹理
- 用opengl做的3D教室漫游程序
- 老何炸飞机源代码
- 《Visual C++ OpenGL DirectX三维动画编程宝
评论
共有 条评论