OpenGL小试牛刀第二季(粒子模拟)
代码展示:
#include "Particle.h"
CParticle::CParticle()
{
data = NULL;
numparticle = 0;
}
CParticle::~CParticle()
{
delete []data;
data = NULL;
}
int CParticle::Create(long num)
{
/** 删除粒子数组 */
if (data)
delete []data;
if(data = new Particle[num])
{
memset(data,0,sizeof(Particle)*numparticle);
numparticle = num;
/** 返回粒子个数 */
return numparticle;
}
return 0;
}
bool CParticle::LoadTextures()
{
char* fileName[] = {"Data/wall.bmp","Data/flare.bmp" };
for(int i=0; i<2; i++)
{
if(!texture[i].LoadBitmap(fileName[i]))
{
MessageBox(NULL,"载入纹理失败!","错误",MB_OK);
exit(-1);
}
/** 创建纹理对象 */
glBindTexture(GL_TEXTURE_2D, texture[i].ID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
texture[i].imageHeight, GL_RGB, GL_UNSIGNED_BYTE,
texture[i].image);
}
return true;
}
unsigned int CParticle::GetTexture(int index)
{
if(index == 0 || index == 1)
return texture[index].ID;
}
int CParticle::SetColor(GLint r,GLint g,GLint b)
{
for (int index=0;index<numparticle;++index)
{
data[index].r=r;
data[index].g=g;
data[index].b=b;
}
return TRUE;
}
{
if(index>=0 && index<numparticle)
{
data[index].r=r;
data[index].g=g;
data[index].b=b;
return TRUE;
}
return FALSE;
}
{
if(index>=0 && index<numparticle)
{
r=data[index].r;
g=data[index].g;
b=data[index].b;
return TRUE;
}
return FALSE;
}
int CParticle::SetPosition(GLfloat x,GLfloat y,GLfloat z)
{
for(int index=0;index<numparticle;++index)
{
data[index].x=x;
data[index].y=y;
data[index].z=z;
}
return TRUE;
}
{
if(index>=0 && index<numparticle)
{
data[index].x=x;
data[index].y=y;
data[index].z=z;
return TRUE;
}
return FALSE;
}
{
if(index>=0 && index<numparticle)
{
x=data[index].x;
y=data[index].y;
z=data[index].z;
return TRUE;
}
return FALSE;
}
/** 设置和获取加速度Acceleration的函数实现 */
int CParticle::SetAcceleration(GLfloat ax,GLfloat ay,GLfloat az)
{
for (int index=0;index<numparticle;++index)
{
data[index].ax=ax;
data[index].ay=ay;
data[index].az=az;
}
return TRUE;
}
{
if(index>=0 && index<numparticle)
{
data[index].ax=ax;
data[index].ay=ay;
data[index].az=az;
return TRUE;
}
return FALSE;
}
{
if(index>=0 && index<numparticle)
{
ax=data[index].ax;
ay=data[index].ay;
az=data[index].az;
return TRUE;
}
return FALSE;
}
int CParticle::SetVelocity(GLfloat vx,GLfloat vy,GLfloat vz)
{
for (int index=0;index<numparticle;++index)
{
data[index].vx=vx;
data[index].vy=vy;
data[index].vz=vz;
}
return TRUE;
}
{
if(index>=0 && index<numparticle)
{
data[index].vx=vx;
data[index].vy=vy;
data[index].vz=vz;
return TRUE;
}
return FALSE;
}
{
if(index>=0 && index<numparticle)
{
vx=data[index].vx;
vy=data[index].vy;
vz=data[index].vz;
return TRUE;
}
return FALSE;
}
int CParticle::SetSize(GLfloat size)
{
for (int index=0;index<numparticle;++index)
{
data[index].size=size;
}
return TRUE;
}
{
if (index>=0 && index<numparticle)
{
data[index].size=size;
return TRUE;
}
return FALSE;
}
{
if(index >= 0 && index < numparticle)
{
size=data[index].size;
return TRUE;
}
return FALSE;
}
int CParticle::SetDec(GLfloat dec)
{
for (int index=0;index<numparticle;++index)
{
data[index].dec=dec;
}
return TRUE;
}
int CParticle::SetDec(GLint index,GLfloat dec)
{
if(index >= 0 && index < numparticle)
{
data[index].dec=dec;
return TRUE;
}
return FALSE;
}
int CParticle::GetDec(GLint index,GLfloat &dec)
{
if(index >= 0 && index < numparticle)
{
dec=data[index].dec;
return TRUE;
}
return FALSE;
}
int CParticle::SetLifeTime(GLfloat lifetime)
{
for (int index=0;index<numparticle;++index)
{
data[index].lifetime=lifetime;
}
return TRUE;
}
int CParticle::SetLifeTime(GLint index,GLfloat lifetime)
{
if(index >= 0 && index < numparticle)
{
data[index].lifetime=lifetime;
return TRUE;
}
return FALSE;
}
int CParticle::GetLifeTime(GLint index,GLfloat &lifetime)
{
if(index >= 0 && index < numparticle)
{
lifetime=data[index].lifetime;
return TRUE;
}
return FALSE;
}
int CParticle::GetAll(int index,GLint &r,GLint &g,GLint &b, /**< 粒子的颜色 */
GLfloat &x,GLfloat &y,GLfloat &z, /**< 位置 */
GLfloat &vx,GLfloat &vy,GLfloat &vz, /**< 速度 */
GLfloat &ax,GLfloat &ay,GLfloat &az, /**< 加速度 */
GLfloat &size, /**< 大小 */
GLfloat &lifetime, /**< 生命时间 */
GLfloat &dec /**< 消失速度 */
)
{
if (index>=0 && index<numparticle)
{
r=data[index].r;
g=data[index].g;
b=data[index].b;
x=data[index].x;
y=data[index].y;
z=data[index].z;
vx=data[index].vx;
vy=data[index].vy;
vz=data[index].vz;
ax=data[index].ax;
ay=data[index].ay;
az=data[index].az;
lifetime=data[index].lifetime;
size=data[index].size;
dec=data[index].dec;
return TRUE;
}
return FALSE;
}
int CParticle::SetAll(int index,GLint r,GLint g,GLint b, /**< 粒子的颜色 */
GLfloat x,GLfloat y,GLfloat z, /**< 位置 */
GLfloat vx,GLfloat vy,GLfloat vz, /**< 速度 */
GLfloat ax,GLfloat ay,GLfloat az, /**< 加速度 */
GLfloat size, /**< 大小 */
GLfloat lifetime, /**< 生命时间 */
GLfloat dec /**< 消失速度 */
)
{
if(index>=0 && index<numparticle)
{
data[index].r=r;
data[index].g=g;
data[index].b=b;
data[index].x=x;
data[index].y=y;
data[index].z=z;
data[index].vx=vx;
data[index].vy=vy;
data[index].vz=vz;
data[index].ax=ax;
data[index].ay=ay;
data[index].az=az;
data[index].lifetime=lifetime;
data[index].size=size;
data[index].dec=dec;
return TRUE;
}
return FALSE;
}
OpenGL小试牛刀第二季(粒子模拟)的更多相关文章
- OpenGL小试牛刀第一季
效果截图:代码展示:using System;using System.Collections.Generic;using System.ComponentModel;using System.Dat ...
- Java入门第二季学习总结
课程总概 该门课程作为java入门学习的第二季,是在有一定的java基础上进行的进一步学习.由于该季涉及到了java的一些核心内容,所以相对第一季来说,课程难度有所提升.大致可将该季的课程分为五部分: ...
- 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...
- 一起做RGB-D SLAM 第二季 (一)
小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...
- JAVA入门第二季(mooc-笔记)
相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...
- Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图
图表简介: 该示意图表示了台湾地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...
- 再造轮子之网易彩票-第二季(IOS 篇 by sixleaves)
02-彩票项目第二季 2.封装SWPTabBar方式一 接着我们思考如何进行封装.前面已经将过了为什么要封装, 和封装达到的效果.这里我们主要有两种封装方式,分别是站在不同的角度上看待问题.虽然角度不 ...
- QQ聊天界面的布局和设计(IOS篇)-第二季
QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了.有些细节可能会一带而过, 如有疑问, 相互交流进步~. 在第一季中我们完成了Q ...
- Eclipse相关集锦第二季
Eclipse相关的问题第二季开始了,这些问题都是我平时遇到的,然后记录下来备忘,帮助到别人最好不过了. 1.Unable to execute dex: GC overhead limit exce ...
随机推荐
- 27.集成EFCore配置Client和API
copy链接字符串,这是一个官方的字符串,直接复制过来,放在上面. 添加包的引用 引入IdentityServer4.EntityFramework的命名空间 主要是这个地方初始化我们的数据库 Ope ...
- FZU - 2218 Simple String Problem(状压dp)
Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...
- EntityFramework 中的链接研究初探
很多人用EF的默认链接工厂:System.Data.Entity.Infrastructure.LocalDbConnectionFactory 然后我一开始就不习惯,然后研究了一下,截图如下 然后就 ...
- STL——queue
1.初始化 需要头文件<queue> queue<int>que; 2.成员函数 C++队列Queue类成员函数如下: back()返回最后一个元素 empty()如果队列空则 ...
- ZOJ2898【折半搜索】
题意: 给出一系列值和对应的陷阱,对于陷阱如果存在两个就抵消,求价值最大. 思路: 折半枚举,利用异或 #include <bits/stdc++.h> using namespace s ...
- 微调Inception V3网络-对Satellite分类
目录 1. 流程概述 2. 准备数据集 2.1 Satellite数据集介绍 3. Inception V3网络 4. 训练 4.1 基于Keras微调Inception V3网络 4.2 Keras ...
- luogu 1169 棋盘制作(单调栈/悬线)
luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...
- jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)
题面 题解 我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸 那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量 ...
- [Xcode 实际操作]六、媒体与动画-(10)UIView视图翻转动的画制作
目录:[Swift]Xcode实际操作 本文将演示翻转动画的制作. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ViewC ...
- std::less
std::less 定义于头文件 <functional> template< class T >struct less; (C++14 前) template ...